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

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

问题描述:

虽然我读的Use of 'extern' keyword while defining the variableextern int a之间的区别; extern int a = 42;

一个用户的答案回答了这些方式

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

的声明规定外main()函数内声明的价值正在讨论的链接问题都假定为文件作用域声明,而不是函数作用域。 –

无论何时尝试初始化,该语句都会变为定义,无论使用的是extern。在这种情况下,extern关键字是多余的,因为默认情况下,未标记为static的符号已经具有外部链接。

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

+0

哇!我不知道c真的是一种奇迹的语言 – niko

+0

所以你的意思是extern int a = 42;除了int a = 42之外什么也不是。 right – niko

+0

好的我在看到你的答案后对我的想法有了一些想法,让我在我的编译器上试试它,并更新我的问题,如果我有任何问题。但是谢谢!极端的 – niko

extern int a;是一个声明。它不分配空间来存储a。

extern int a = 42;是一个定义。它分配空间来存储int值和分配给它42

这里的变量,其中它的定义是在全局声明节

extern int a; //This is a declaration 

extern int a=42; //This is a definition 
+2

!是啊! – UmNyobe