我对6.9 p5
C18的N2310
中的措词有点困惑:
如果在外部链接中使用通过外部链接声明的标识符,表达式(不作为
sizeof
或_Alignof
操作数的一部分运算符,其结果是一个整数常量),在整个位置上程序应完全标识符;否则,不得超过一个。 164)
问题:从此引号中可以明显看出,程序中某个地方的外部定义(如果有的话)也应声明一个具有外部链接的标识符?
正如我强调的那样,[[整个程序中的某个地方,标识符应该有一个外部定义。它没有指定定义应使用哪个链接声明标识符。示例:
tu1.c
:int a = 10;
tu2.c
:
static int a = 20;
从形式上来说,我们在a
中声明了标识符tu1.c
的一个外部定义,在tu2.c
中定义了另一个定义,因此我们可以将上面引用的引号应用于此示例。尽管要表示以不同的方式声明的相同实体标识符,都应使用
6.2.2/2
中指定的外部链接进行声明:构成翻译单元和库的一组整个程序,每个特定标识符的声明都带有外部链接表示相同的对象或功能。这里不是这种情况。