C2x:为什么alignas是关键字而不是宏?

2lpgd968  于 2023-02-11  发布在  其他
关注(0)|答案(1)|浏览(166)

在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(例如)作为关键字而不是宏的基本原理是什么?

uqcuzwp8

uqcuzwp81#

这些变更的提案(可在https://open-std.org/JTC1/SC22/WG14/www/docs/n2934.pdf获得)认为,关于新关键词的命名策略已经与之前的标准版本不一致:
一些是使用非保留名称(constinline)集成的,其它是以下划线大写形式集成的。对于其中的一些,通过一组库头文件来确保小写形式的使用。
提案中还提到进一步使用与C++相同的关键字命名(出于兼容性目的),因为一些关键字起源于该语言,后来添加到C中。

相关问题