![]() |
1
33
在C标准中,术语“保留”的含义由7.1.3p2定义,紧靠您引用的项目符号列表下方:
重点:保留标识符对 程序 ,而不是实现。因此,公共解释(保留标识符可由实现用于任何目的)对于C是正确的。
|
![]() |
2
16
作为 一种描述是什么使一个程序形成良好的结构,以及它的效果是什么。那是因为 一个符合标准的编译器是一个为任何符合标准的程序做正确事情的编译器:
极大地 编译器的限制性扩展。例如,仅基于该子句,编译器不应该定义 它自己的保留字。毕竟,任何一个特定的编译器给定的单词 希望 然而,要保留,可能会出现在严格一致的程序中,迫使编译器手动执行。 然而,标准仍在继续:
这是关键。编译器扩展的编写方式必须使其影响 不合格 程序(包含未定义行为的程序,或者根本不应该编译的程序),允许它们编译并执行有趣的额外操作。
需要
这些标识符是为了给实现提供一些额外的回旋余地,因为它们提供了一些使程序不一致的东西。编译器之所以能够识别,
因此,“为任何用途保留”的重要性在于,编译器有权将这些标识符视为具有它所关心的任何含义。未来的兼容性是一个相对遥远的问题。
我怀疑措辞的差别在于C++标准,只是对扩展如何工作更清楚。尽管如此,C标准中的任何内容都不能阻止实现做同样的事情(我们基本上都忽略了编译器在每次使用
|
![]() |
3
14
关于C和C++的措辞差异,我将自己的小研究发布在这里作为参考:
显然,“保留任何用途”的措辞是由ANSI/ISOC90委员会发明的,而C++委员会几年后使用了一种更清晰的措辞,类似于标准前K&中的措辞。一本书。 C99基本原理V5.10在7.1.3中说明了这一点:
这使委员会的意图非常明确:“保留供任何使用”是指“保留给实施者”。 同样值得注意的是,现行C标准在6.2.5中的其他地方有以下规范性文本:
资料性的脚注38中写道:
|
![]() |
4
4
C有多个上下文,其中一个符号可以有一个定义:
什么“保留供任何使用”意味着兼容程序中的用户代码不能使用 1 可以 “为任何用途保留”并不意味着实现不能使用这些符号。保留的目的是提供实现可以自由使用的名称空间,而不用担心实现定义的名称与兼容程序中用户代码定义的名称冲突。
1
该标准并不完全意味着“不能使用”。该标准鼓励编程使用少量以双下划线开头的名称。例如,需要一个兼容的实现来定义
|
![]() |
5
2
C标准允许实现将他们认为合适的任何含义附加到保留标识符上。当没有理由这样做时,大多数实现将保留形式的未识别标识符视为与任何其他已识别标识符相同,从而允许如下操作:
声明标识符
|
![]() |
6
0
你的问题可以从相反的方向看。该标准允许实现(正如您所观察到的)使用类似
为了便于讨论,我们假设未来的C标准引入了新的关键字
回答:
没问题。
|
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |