2012-05-20 91 views
6

字符數組是全局定義的,並且具有相同名稱的結構在函數中定義。爲什麼sizeof運算符返回不同的值C++ cC++?sizeof運算符爲c和C++返回不同的值?

char S[13]; 
void fun() 
{ 
    struct S 
    { 
     int v; 
    }; 
    int v1 = sizeof(S); 
} 

//返回4在C++和13用C

+0

@OliCharlesworth:編譯在我的編譯器 – Ashwyn

+0

@Ashwyn精 - 你的編譯器編譯沒有',''後結構S'」宣言? – birryree

+0

@OliCharlesworth:哎呀抱歉!忘了寫,實際上我寫了那個代碼,而不是複製粘貼! – Ashwyn

回答

15

因爲在C++中,struct你定義被命名爲S,而在C,它的命名struct S(這就是爲什麼你經常看到的C代碼使用typedef struct)。如果你要改變的代碼下面,你會得到預期的結果:

char S[13]; 
void fun() 
{ 
    typedef struct tagS 
    { 
     int v; 
    } S; 
    int v1 = sizeof(S); 
} 
+1

使用名稱以下劃線開頭,後跟大寫字母是個壞主意,因爲這些名稱是[reserved](http://stackoverflow.com/questions/228783/)用於實現。 – fredoverflow

+0

夠公平的。稍作修改(並不是說爲了這個例子,它很重要)。 –

10

在C語言中,指的結構類型,你需要說struct S。因此,sizeof(S)指的是數組。

在C++中,struct是不必要的。所以本地S隱藏全球S