在1990年,P.J. Plauger写道(强调添加):
标准C为您提供了另一层安全性。在我所知道的其他语言标准中,它是唯一提供此层级别的语言。它承诺如果您避免使用某些名称,则不会出现冲突。因此,标准C使编写高度可移植的应用程序变得更加容易。
在C11中引入了关键字`_Alignas`(例如),并伴随着在``中定义的宏`alignas`。在这里,我们看到关键字是`_Alignas`,而不是`alignas`(因为在C11之前,`alignas`未保留)。因此,与可能的用户定义的“alignas”没有冲突。
然而,在C2x中,alignas是一个关键字,并且stdalign.h不提供任何内容(而且C2x对__alignas_is_defined宏没有任何说明——缺陷?)。这意味着在C2x中,任何包含用户定义的alignas的先前C2x代码都将导致语义违规,因此破坏向后兼容性。
问题:
1.这是否意味着自C2x以来,“您将不再遇到冲突”不再适用?
2.alignas(例如)成为关键字而不是宏的基本原理是什么?
标准C为您提供了另一层安全性。在我所知道的其他语言标准中,它是唯一提供此层级别的语言。它承诺如果您避免使用某些名称,则不会出现冲突。因此,标准C使编写高度可移植的应用程序变得更加容易。
在C11中引入了关键字`_Alignas`(例如),并伴随着在``中定义的宏`alignas`。在这里,我们看到关键字是`_Alignas`,而不是`alignas`(因为在C11之前,`alignas`未保留)。因此,与可能的用户定义的“alignas”没有冲突。
然而,在C2x中,alignas是一个关键字,并且stdalign.h不提供任何内容(而且C2x对__alignas_is_defined宏没有任何说明——缺陷?)。这意味着在C2x中,任何包含用户定义的alignas的先前C2x代码都将导致语义违规,因此破坏向后兼容性。
问题:
1.这是否意味着自C2x以来,“您将不再遇到冲突”不再适用?
2.alignas(例如)成为关键字而不是宏的基本原理是什么?
bool
、true
和false
在C23中也将成为关键字。我认为与C++的兼容性比与旧的垃圾代码的向后兼容性更有说服力。 - Lundin