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
以前のケースでは許可されていたの再宣言が許可されないのはなぜですか?