【发布时间】:2014-10-10 13:45:14
【问题描述】:
#include <stdio.h>
int main()
{
int a;
printf("%d\n",a);
}
上例中的语句:int a; — 是声明还是定义?如果它是一个声明,printf() 语句应该给出一个错误,但它会打印一个垃圾值。所以我们不能称之为声明。但根据语法,它是一个声明。那么这种情况有什么不同呢?
【问题讨论】:
-
“如果是声明,printf() 语句应该报错”——你具体说的是什么错误?
-
请注意,即使
a仅被声明,未定义,printf()语句也会编译——声明使变量或函数可供使用。如果仅声明变量而未定义变量,则代码将不会链接(因此不会运行),直到代码被修改以包含已声明变量的定义。例如,int main(void) { extern int a; printf("%d\n", a); return 0; } int a = 57;显示声明和后续定义。 -
与你的问题无关,但你应该在
}之前使用return 0,否则你可能会遇到警告
标签: c declaration definition