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