关于C#:以下示例中的声明和定义有什么区别?

What is the difference between declaration and definition in the example below?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
#include <stdio.h>

int main()
{
   int a;      
   printf("%d
"
,a);
}

上面例子中的语句:int a;—它是声明还是定义?如果它是一个声明,那么printf()语句应该给出一个错误,但它会打印一个垃圾值。所以我们不能称之为声明。但是根据语法,它是一个声明。那么这个案例有什么区别呢?


这是一个声明,这是无法回避的事实。C语言中的每个定义都是同时声明的。相反:有些声明是定义,有些则不是。

代码中的int a;是一个恰好也是定义的声明。


在C中声明局部变量时,将为该变量在堆栈上创建空间。当您声明int a而不给a一个特定的值时,它的值将是在堆栈上为它预留的位置内存中已经存在的任何值。这很可能是一个垃圾值,这就是为什么在打印a的值时会看到奇怪的数字。为避免出现这种情况,请申报int a = 0或其他号码。

至于如何声明而不是定义变量,您应该使用另一个答案中解释的extern关键字。


这是一个定义。

对于C中的变量,如果只想声明它,而不是定义它,则必须使用"extern"关键字。这里有一篇好文章


声明意味着我们只是在创建一个变量或方法。定义意味着我们正在为变量赋值,并在方法中执行一些函数。