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()语句应该给出一个错误,但它会打印一个垃圾值。所以我们不能称之为声明。但是根据语法,它是一个声明。那么这个案例有什么区别呢?
- 型"如果它是一个声明,printf()语句应该给出一个错误"-您具体说的是什么错误?
- 型注意,即使只声明了a而没有定义,printf()语句也会编译—声明使变量或函数可用。如果只声明了变量而没有定义,那么代码将不会链接(因此也不会运行),直到代码被修改为包含声明变量的定义。例如,int main(void) { extern int a; printf("%d
", a); return 0; } int a = 57;显示声明和后续定义。
- 型与你的问题无关,但你应该在}之前使用return 0,否则你可能会遇到警告。
这是一个声明,这是无法回避的事实。C语言中的每个定义都是同时声明的。相反:有些声明是定义,有些则不是。
代码中的int a;是一个恰好也是定义的声明。
在C中声明局部变量时,将为该变量在堆栈上创建空间。当您声明int a而不给a一个特定的值时,它的值将是在堆栈上为它预留的位置内存中已经存在的任何值。这很可能是一个垃圾值,这就是为什么在打印a的值时会看到奇怪的数字。为避免出现这种情况,请申报int a = 0或其他号码。
至于如何声明而不是定义变量,您应该使用另一个答案中解释的extern关键字。
这是一个定义。
对于C中的变量,如果只想声明它,而不是定义它,则必须使用"extern"关键字。这里有一篇好文章
声明意味着我们只是在创建一个变量或方法。定义意味着我们正在为变量赋值,并在方法中执行一些函数。
- 您不能用声明创建任何内容。您只需告诉编译器稍后将创建一个项。