定义考虑代码:宣言VS用C
int main(void)
{
int a;
}
据我所知,int a;
是一个定义,因为它会导致存储被保留。援引C标准(N1570委员会草案 - 2011年4月12日):
6.7/5语义 甲声明指定一组标识符的解释和属性。的识别符的定义是该标识符的声明:
- 为一个对象,使存储到该对象保留;
...
问题来了:编译器可以优化掉的存储,因为我们没有使用变量。然后int a;
一个声明呢?而如果我们在一个main(void)
printf("%p", &a)
做 - 当然现在的编译器有分配存储空间,所以是声明/定义的概念依赖于你是否以后使用标识符或没有?
的定义是总的定义,即使不使用(并且甚至当编译器实际上不发射码或保留空间为它)。 –
@JoachimPileborg这个标准有点含糊不清,它肯定地说:*导致存储保留... *。然后贯穿整个标准,该术语可互换使用,例如,他们调用'int * p;'a *声明*。整个讨论开始[here](http://stackoverflow.com/a/33159989/3093378) – vsoftco
[定义和声明之间有什么区别?](http://stackoverflow.com/questions/ 1410563 /定义和声明之间的区别是什么) –