2013-07-01 125 views
-1

我woundering下面的代碼:嵌套結構的範圍是什麼?

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    struct test1 
    { 
    struct test2 
    { 
     struct test3 
     { 
     enum TokenType 
     { 
      COMMA_TOKEN, EOF_TOKEN, 
     } token_value; 
     } b; 
    } c; 
    }; 

    struct test2 hsd; 
    hsd.b.token_value = 2; 

    return 0; 
} 

應該支柱TEST2,TEST3和枚舉作爲結構test1的範圍內,但編譯器的範圍並沒有報告任何錯誤,順便編譯器MinGW的GCC。

回答

1

在C中允許使用這樣的代碼,因爲所有類型都是在單個名稱空間中聲明的。

在C++編譯器中應該產生一個錯誤,因爲struct test2在struct test1的範圍內聲明。在C++中,您的變量應聲明如下:

test1::test2 hsd;