考虑一下代码:
int main(void)
{
int a;
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这int a;是一个定义,因为它会导致存储被保留.引用C标准(N1570委员会草案 - 2011年4月12日):
6.7/5语义 声明指定了一组标识符的解释和属性.标识符的定义是该标识符的声明:
- 对于一个对象,导致为该对象保留存储;
...
问题出在这里:编译器可能会优化存储,因为我们没有使用变量.那么int a;是宣言吗?而如果我们做printf("%p", &a)的main(void)-当然现在编译器必须分配存储空间,所以是声明/定义的概念依赖于你是否以后使用标识符或没有?