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

struct t_empty {
};

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

解决方法

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

在C中,空类确实合法.

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

struct S {
  int : 5;
};

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...