Pav*_*kin 6 c backwards-compatibility language-lawyer
1990 年,PJ Plauger 写道(强调是后加的):
然而,标准 C 为您提供了额外的安全级别。据我所知,这是其他语言标准中没有提供的水平。它承诺,如果您避免使用某些名称集,您将不会遇到冲突。因此,标准 C 使得编写高度可移植的应用程序变得更加容易。
在 C11 中,关键字_Alignas(例如)是alignas与<stdalign.h>. 这里我们看到关键字是_Alignas, not alignas(因为在 C11 之前的版本中alignas没有保留)。因此,不会与可能的用户定义发生冲突alignas。
然而,在 C2x 中, thealignas是一个关键字并且<stdalign.h>不提供任何内容(并且 C2x 没有提及__alignas_is_defined宏——缺陷?)。这意味着在 C2x 中,任何包含用户定义的 C2x 之前的代码都alignas将导致语义违规,从而破坏向后兼容性。
问题:
alignas(例如)成为关键字而不是宏的理由是什么?这些更改的提案(可在https://open-std.org/JTC1/SC22/WG14/www/docs/n2934.pdf获取)认为,有关新关键字的命名策略已经与以前的标准版本不一致:
一些使用非保留名称 (
const,inline) 进行集成,另一些则使用下划线大写形式进行集成。对于其中一些,通过一组库头文件确保使用小写形式。
提案中还提到进一步使用与 C++ 相同的关键字命名(出于兼容性目的),因为一些关键字起源于该语言,后来被添加到 C 中。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |