如何定义外部变量?

时间:2013-09-16 04:26:01

标签: c extern

extern int i;// is a declaration
int j; //definition

作者已经给出第一个声明是一个声明,第二个作为定义。我认为第二个声明是声明,首先是定义。

我完成了Herbert Schildt的完整参考资料C

4 个答案:

答案 0 :(得分:2)

extern int i

...是variable declaration,因为它只告诉编译器“存在一个名为i的变量,但它在其他地方定义了”。

int i

...是一个变量定义,因为它告诉编译器创建实际变量。

答案 1 :(得分:0)

关键字extern用于声明外部变量,因此本书是正确的。

有一个例外,如果添加了初始化程序,那么它就是一个定义:

extern int i = 42;

答案 2 :(得分:0)

首先,第一个和第二个都不是“声明”。在C语言中,声明不是语句。声明是声明,声明是声明 - 在C中这是两个独立的非交叉世界。

其次,每个定义都是同时声明。定义只是一种特殊的声明。所以反对声明是不正确的,定义是一种互相排斥的方式。

第三,评论所说的是正确的,你错了。第一个是非定义声明。第二个是定义

第四,第二个是所谓的暂定定义 - 一个特定于C的特征。它有一些特殊的属性。在一般情况下,它不一定用外部链接定义变量。它定义的变量的链接可能取决于上下文。在您的具体示例中,从字面上看,它确实定义了具有外部链接的变量。您可以搜索术语暂定定义以了解有关它的更多信息。

第五,Shildt的书很成熟,带有大量的术语错误(而不只是术语错误)。这实际上是他们最熟悉的。

答案 3 :(得分:0)

声明:刚刚声明的变量

Ex: int i; 

定义:带值的变量declaration+its initialization

Ex: int i=10;

在你的情况下

extern int i;// is a declaration    
//because you did not initialize value to i here.

假设j是全局变量。然后在声明时用ZERO初始化 这里declaration+initialization =definition

int j; //definition  

如果j是本地的,那么它只是声明。