我试图理解的联系enumeration constant
s并且在标准中找不到明确的答案N1570
. 6.2.2(p6)
:
以下标识符没有链接:声明为的标识符
是对象或函数以外的任何东西;声明的标识符
作为函数参数;对象的块作用域标识符
声明时不带存储类说明符extern
.
所以我需要理解常量不是对象。对象定义为3.15
:
执行环境中的数据存储区域,内容
可以代表值
Also 6.2.2(p4)
(强调我的):
对于使用存储类说明符 extern 声明的标识符
该标识符的先前声明可见的范围,31)
如果先前的声明指定了内部或外部链接,则
稍后声明中标识符的链接与
先前声明中指定的链接。如果没有事先声明
可见,或者如果先前的声明指定没有链接,则
标识符具有外部链接.
Anyway 6.4.4.3(p2)
:
声明为枚举常量的标识符具有类型int
.
结合所有我不明白的原因
enum test {
a = 1
};
extern int a; //compile-error. UB?
不编译?我期望a
具有外部联系。
现场演示
行为是否明确定义?您能提供解释这一点的标准参考吗?
声明为枚举常量的标识符的类型为 int
这并不意味着它是 int 类型的变量
but
extern int a;
说有一个类型的变量int named a,这与枚举常量冲突
为什么枚举常量没有链接
出于同样的原因,常量 123 (也具有类型int,但无论如何)也没有联系
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)