2010-10-25 463 views
3
int x; 

這是聲明還是定義?變量聲明和定義

我寫了下面的代碼,

#include <stdio.h> 

int main(void) 
{ 
    int x; 
    printf("%p",&x); 
    return 0; 
} 

它打印一些地址。因此,內存分配,int x;不能只是一個聲明。那它是一個定義嗎?

+0

這非常含糊。我沒有很好地回答這個問題。 – krico 2010-10-25 07:57:52

+0

此外,此代碼可能會給你一個段錯誤取決於你在哪個平臺上運行它。 – krico 2010-10-25 07:58:28

+6

@krico:問題是確切的。 – 2010-10-25 07:59:28

回答

3

C standard (n1256)

6.7聲明
...
5一個聲明指定一組標識符的解釋和屬性。 A 定義的標識符是該標識符的聲明:

- 對於一個對象,導致爲該對象保留存儲空間;
- 對於功能,包括功能體; 101)
- 對於枚舉常量或typedef名稱,是 標識符的(唯一)聲明。

在這種情況下,int x;是一個定義(或定義聲明)。

2

int x;是一個定義。 extern int x;只是一個聲明。 extern int x = 3;也是一個定義。 HTH

+3

由於他只是接受變量的地址,我不明白爲什麼這是UB。 – Job 2010-10-25 08:01:08

+0

@工作,哦,對不起,沒有看到 – 2010-10-25 08:02:12

+0

@Armen Tsirunyan我試圖說明編譯器爲int x分配內存; – Parikshita 2010-10-25 08:02:23