以下是extern
和static
变量,其名称相同。输出打印静态变量a = 10。为什么没有语法错误?如果需要,我将如何访问extern a
?
#include<stdio.h>
extern int a;
static int a=10;
main()
{
printf("%d\n",a);
}
答案 0 :(得分:2)
C标准允许相反,extern
之后static
:
6.2.2标识符的链接
....
3 如果对象或函数的文件范围标识符的声明包含存储类 说明符static
,标识符具有内部链接。4 对于在范围内使用存储类说明符
extern
声明的标识符 如果先前声明指定内部或,则可以看到该标识符的先前声明 外部链接, 后面声明中标识符的链接与 在先前声明中指定的联系 。如果没有先前的声明可见,或者如果先前声明 声明指定没有链接,那么标识符有外部链接。
同时声明:
7 如果在翻译单元内,同一标识符同时显示内部和外部 联系,行为未定义。
BTW,C ++标准明确指出:
7.1.1存储类说明符
....static int b; // b has internal linkage extern int b; // b still has internal linkage
...
extern int d; // d has external linkage static int d; // error: inconsistent linkage