为什么枚举常量没有链接?

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有外部联系.

现场演示

行为定义明确吗?您能否提供标准解释说明?

bru*_*uno 7

声明为枚举常量的标识符的类型为int

这并不意味着它是int类型的变量

extern int a;
Run Code Online (Sandbox Code Playgroud)

说有一个名为a的int类型的变量,这是与枚举常量的冲突


为什么枚举常量没有链接

出于同样的原因,常量123(也有int类型,但无论如何)也没有链接