根据我的理解,当你说;
int var; // it is a declaration because no value stored in var
但是当你这样做时;
int var = 90; // it is a definition because var got its value
提出这个问题的理由是我正在关注书籍和互联网进行编程。但是,我到处都看到定义和宣言的不同含义。请澄清一下,如果你知道的更好吗?
有些人说两者都是定义,如果是这样的话,为什么下面的程序会在gcc中给出“重新声明错误”而不是“redifination error”。
int main(){
int var = 100;
int var;
return 0;
}
编译时出错:
答案 0 :(得分:1)
它声明或定义的天气全部取决于您使用它的位置。天气它是同一程序的全局变量或其他程序的外部变量。 案例1
int var;
main ()
行int var;都声明并定义变量;它有效地说,“创建一个名为var的变量,类型为int。此外,变量的存储是它是在与此源文件关联的目标文件中定义的全局变量
案例2
extern int var;
main()
但是这里是声明变量但没有定义变量。所以这一切都取决于你在哪里使用这个
答案 1 :(得分:0)
在函数内部,int var;
和int var = 90;
都是定义。如果在同一范围内有两个var
定义,则会出现编译错误。请注意,它们也是声明(所有定义都是声明)。
相同的语法在函数之外具有不同的含义,这可能是您混淆的原因。
答案 2 :(得分:0)
不,您对声明和定义的理解不正确。
该行
int var;
是一份声明。它也可以是一个取决于上下文的定义(因为所有定义都是声明)。例如,在;
int var;
int main()
{
}
var
的声明是具有外部链接的变量var
的暂定定义。在上面的上下文中,它实际上是一个定义。但是,如果我们将代码修改为;
int var = 42;
int var;
int main()
{
}
然后int var = 42
是带有初始化(42
)的定义,以下暂定定义int var
成为声明但不是定义。如果交换了两行int var
和int var = 42
,情况也是如此。
更好的是,如果将int var
置于函数内,则含义会发生变化。例如;
int main()
{
int var;
}
在此上下文中,int var
是自动存储持续时间的变量var
的定义。将var
的第二个定义放在同一范围内是非法的。
int main()
{
int var; /* definition */
int var = 42; /* second definition - illegal */
}