extern int a之间的区别; extern int a = 42;

nik*_*iko 5 c

当我在定义变量时阅读使用'extern'关键字的答案

其中一位用户回答了这些问题

 extern int a;       //  not a definition 
 extern int a = 42;  //  definition 
Run Code Online (Sandbox Code Playgroud)

我期待两者都不是定义而是宣言.我在想这两个语句都说变量是在函数外部定义的,我们必须使用extern关键字来使用它.这是他的错误还是真正的定义?我知道

extern int a; // variable is already defined but its outside the function
extern int a=42 ; //I guess a variable is assigned a value but not a definition 
Run Code Online (Sandbox Code Playgroud)

但这些说法

extern int a = 42; // user said its a definition and now i got  confused
Run Code Online (Sandbox Code Playgroud)

请用这些清楚我.

Bla*_*iev 7

每当初始化尝试,语句变成一个定义,无论是extern被使用.该extern关键字是在这样的情况下多余的,因为,在默认情况下,未标记的符号static已经有外部连接.

声明外部变量并在当前编译单元中设置其初始值是没有意义的,这是一个矛盾.


qbe*_*220 5

extern int a;是宣言.它没有分配存储空间.

extern int a = 42;是一个定义.它分配空间来存储int值a并为其赋值42.