struct t_empty { };
这似乎可以在C中正确编译但不能在C中正确编译.(至少在TI 28xx DSP编译器中,它会发出错误“预期声明”)这是在C标准的某处提到的,还是我的编译器坏了?
解决方法
空结构是C中的语法错误.编写C语言的语法,以便禁止空结构.即你不会明确地在标准中找到它,它只是从语法中得出.
在C中,空类确实合法.
附:请注意,通常您可能会看到C标准中的引用“如果struct-declaration-list不包含命名成员,则行为未定义.”,它表示为禁止空结构的文档部分.实际上,语法禁止空结构.所以一个字面上空的结构(如你的问题)是语法错误,而不是未定义的行为.标准的上述引用适用于不同的情况:没有命名成员的结构.结构可以最终为非空,但如果所有成员都是未命名的位域,则同时没有命名成员
struct S { int : 5; };
在上面的例子中,行为是未定义的.这就是上面引用的内容.