微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

struct t_empty {
};

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

解决方法

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

在C中,空类确实合法.

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

struct S {
  int : 5;
};

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

原文地址:https://www.jb51.cc/c/116306.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐