这里说的嵌套,其实是在结构体里定义结构体及枚举。
需要重新考虑一下标识符的作用域,特别是块作用域。
struct s0
{ // @
int a;
}; // @
int main(int argc, char *argv)
{
}
两个@之间并不是一个块作用域。
所以,
struct s0
{
struct s1
{
int a;
} m;
enum e0
{
E00,
E01
} mm;
int a;
};
int main(int argc, char *argv)
{
struct s1 s;
s.a = EE0;
}
上述代码是合法的,s1,e0,E00,E01的作用域都是文件作用域,而不被struct s0所限制。
而,
void abc(void)
{
struct s1
{
int a;
} m;
enum e0
{
E00,
E01
} mm;
int a;
}
int main(int argc, char *argv)
{
struct s1 s;
s.a = EE0;
}
上述代码是非法的,s1,e0,E00,E01的作用域都是基于函数abc所对应的块作