2013-07-01 162 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;