Som*_*ame 1 c enums extern language-lawyer
我试图理解enumeration constants的联系,但在标准中找不到明确的答案N1570.6.2.2(p6):
以下标识符没有链接:声明为对象或函数以外的任何标识符; 声明为函数参数的标识符; 没有存储类说明符声明的对象的块作用域标识符
extern.
所以我需要理解常量不是对象.对象定义为3.15:
执行环境中的数据存储区域,其内容可以表示值
另外6.2.2(p4)(强调我的):
对于在范围内使用存储类说明符extern声明的标识符,其中该标识符的先前声明是可见的,31)如果先前声明指定内部或外部链接,则后面声明中标识符的链接与在先前声明中指定的联系.如果没有先前声明 可见,或者先前声明未指定链接,则 标识符具有外部链接.
无论如何6.4.4.3(p2):
声明为枚举常量的标识符具有类型
int.
结合所有我不明白的原因
enum test {
a = 1
};
extern int a; //compile-error. UB?
Run Code Online (Sandbox Code Playgroud)
不编译?我希望a有外部联系.
行为定义明确吗?您能否提供标准解释说明?
声明为枚举常量的标识符的类型为int
这并不意味着它是int类型的变量
但
Run Code Online (Sandbox Code Playgroud)extern int a;
说有一个名为a的int类型的变量,这是与枚举常量的冲突
为什么枚举常量没有链接
出于同样的原因,常量123(也有int类型,但无论如何)也没有链接