extern int i;// is a declaration
int j; //definition
作者已经给出第一个声明是一个声明,第二个作为定义。我认为第二个声明是声明,首先是定义。
我完成了Herbert Schildt的完整参考资料C
答案 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是本地的,那么它只是声明。