2017-02-23 37 views
0
Code 1 
#include <stdio.h> 
int T; 
int main() 
{ 
    struct T{ double x;}; 
    printf("%d", sizeof(T)); 
    return 0; 
} 

輸出:4混淆關於變量的範圍用C

Code 2 
#include <stdio.h> 
struct T{ double x;}; 
int main() 
{ 
    int T; 
    printf("%d", sizeof(T)); 
    return 0; 
} 

輸出:4

對於code 1,我認爲輸出是全局變量(int T)的大小,這就是爲什麼它給4

但對於code 2,它給輸出4,根據全局變量的邏輯,它應該是輸出8 struct T{ double x;};

這裏,全局變量的概念是不正確的 - 我想。

誰能請解釋一下這是什麼原因輸出樣子?

回答

2

這裏的問題不是範圍,而是結構標籤如何與其他符號不同的命名空間生活在一起。

正因爲如此,當你做sizeof(T)總是得到變量T

爲了讓用C你需要的struct關鍵字結構變量。如sizeof(struct T)。如果使用typedef


事情會有所不同:

struct T 
{ 
    double x; 
} T; 

那麼你將有一個名爲「正常」的命名空間T型。另一方面,這種類型會與具有相同名稱的變量發生衝突,因此您會得到一個編譯器錯誤。

+1

隨着'T'一個typedef,就不會有編譯錯誤。這兩個名字將在不同的(嵌套)範圍內;內部名稱將是'printf()'語句中使用的名稱(帶有'sizeof'運算符)。 –