定義考慮代碼:宣言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 /定義和聲明之間的區別是什麼) –