我对 extern 的以下行为感到惊讶。
当我运行这个
#include<stdio.h>
int main()
{
extern int a;
printf("%d\n", a);
return 0;
}
int a=20;
输出: 20(在 gcc Linux 32 位中,看起来还可以)
a
但是当我在里面声明变量时main()
:
#include<stdio.h>
int main()
{
extern int a;
int a=20;
printf("%d\n", a);
return 0;
}
输出:
extern.c: In function ‘main’:
extern.c:5:9: error: declaration of ‘a’ with no linkage follows extern declaration
extern.c:4:16: note: previous declaration of ‘a’ was here
为什么在将范围a
从全局更改为本地后现在出现错误?为什么它现在不允许重新声明a
,而在以前的情况下允许。