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

作者给出的第一个陈述是一个声明,第二个是一个定义。我认为第二个陈述是一个声明,第一个是一个定义。

我浏览了 Herbert Schildt 的完整参考 C

4

4 回答 4

2
extern int i

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

int i

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

于 2013-09-16T04:30:42.693 回答
0

关键字extern是用来声明外部变量的,书上说的没错。

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

extern int i = 42;
于 2013-09-16T04:33:27.193 回答
0

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

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

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

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

第五,希尔特的书已经成熟,存在大量术语错误(而不仅仅是术语错误)。这实际上是他们最出名的。

于 2013-09-16T04:46:41.367 回答
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 是全局变量。然后在声明时用零初始化。
这里declaration+initialization =definition

int j; //definition  

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

于 2013-09-16T04:48:01.567 回答