我正在阅读Use of 'extern' keyword while defining the variable
的答案其中一位用户以这种方式回答
extern int a; // not a definition
extern int a = 42; // definition
我期待两者都不是定义而是声明。我在想这两个语句都说变量是在函数外部定义的,我们必须使用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
但这些陈述
extern int a = 42; // user said its a definition and now i got confused
请用这些来清除我。
答案 0 :(得分:7)
每当尝试初始化时,无论使用extern
,语句都变为定义。在这种情况下,extern
关键字是多余的,因为默认情况下,未标记为static
的符号已经具有外部链接。
声明外部变量并在当前编译单元中设置其初始值没有意义,这是一个矛盾。
答案 1 :(得分:5)
extern int a;
是一个声明。它没有分配存储空间的空间。
extern int a = 42;
是一个定义。它分配空间来存储int值a并为其赋值42.
答案 2 :(得分:0)
这里变量在main()函数内声明,其定义在全局声明部分
之外定义extern int a; //This is a declaration
extern int a=42; //This is a definition