在1990年P.J.普劳格写道(强调):
然而,标准C为您提供了额外的安全级别。据我所知,其他语言标准都没有提供这种级别。它承诺,如果您避免某些名称集,* 您将不会遇到冲突 *。因此,标准C使编写高度可移植的应用程序变得更加容易。
在C11中,关键字_Alignas
(例如)与<stdalign.h>
中定义的宏alignas
一起引入。这里我们看到关键字是_Alignas
,而不是alignas
(因为在C11之前的版本中,alignas
没有保留)。因此,与可能的用户定义alignas
没有冲突。
然而,在C2x中,alignas
是一个关键字,<stdalign.h>
不提供任何内容(并且C2x没有提到__alignas_is_defined
宏--defect?),这意味着在C2x中,任何包含用户定义的alignas
的C2x之前的代码都将导致语义冲突,从而破坏向后兼容性。
问题:
1.这是否意味着自C2x以来,"您将不会遇到冲突"不再成立?
1.将alignas
(例如)作为关键字而不是宏的基本原理是什么?
1条答案
按热度按时间uqcuzwp81#
这些变更的提案(可在https://open-std.org/JTC1/SC22/WG14/www/docs/n2934.pdf获得)认为,关于新关键词的命名策略已经与之前的标准版本不一致:
一些是使用非保留名称(
const
,inline
)集成的,其它是以下划线大写形式集成的。对于其中的一些,通过一组库头文件来确保小写形式的使用。提案中还提到进一步使用与C++相同的关键字命名(出于兼容性目的),因为一些关键字起源于该语言,后来添加到C中。