请考虑下面的代码:
int main(void)
{
int a;
}
据我所知,
int a;
是一个定义,因为它会导致存储被保留。引用C标准(N1570委员会草案-2011年4月12日):
现在问题来了:编译器可能会优化掉存储,因为我们没有使用变量。那么6.7/5 语义 声明指定一组标识符的解释和属性。标识符的定义是对该标识符的声明,它:
— 对于对象,导致为该对象保留存储空间;
...
int a;
是一个声明吗?如果我们在main(void)
中执行printf("%p", &a)
,编译器肯定要分配存储空间,那么声明/定义的概念是否取决于您稍后是否使用标识符呢?
int* p;
为 声明。整个讨论始于这里。 - vsoftco