空结构定义在C中是非法的但不是C?

前端之家收集整理的这篇文章主要介绍了空结构定义在C中是非法的但不是C?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
struct t_empty {
};

这似乎可以在C中正确编译但不能在C中正确编译.(至少在TI 28xx DSP编译器中,它会发出错误“预期声明”)这是在C标准的某处提到的,还是我的编译器坏了?

解决方法

空结构是C中的语法错误.编写C语言的语法,以便禁止空结构.即你不会明确地在标准中找到它,它只是从语法中得出.

在C中,空类确实合法.

附:请注意,通常您可能会看到C标准中的引用“如果struct-declaration-list不包含命名成员,则行为未定义.”,它表示为禁止空结构的文档部分.实际上,语法禁止空结构.所以一个字面上空的结构(如你的问题)是语法错误,而不是未定义的行为.标准的上述引用适用于不同的情况:没有命名成员的结构.结构可以最终为非空,但如果所有成员都是未命名的位域,则同时没有命名成员

struct S {
  int : 5;
};

在上面的例子中,行为是未定义的.这就是上面引用的内容.

猜你在找的C&C++相关文章