gpt4 book ai didi

c++ - 空结构定义在 C 中是非法的,但在 C++ 中不是?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:09:13 25 4
gpt4 key购买 nike

struct t_empty {
};

这似乎可以在 C++ 中正确编译,但不能在 C 中正确编译。(至少对于 TI 28xx DSP 编译器,它会发出错误“expected a declaration”)这是在 C 标准的某处提到的,还是我的编译器损坏了?

最佳答案

Empty struct 是C 中的一个语法错误。C 语言的语法是这样写的,它禁止空结构。 IE。您不会在标准中明确说明它,它只是遵循语法。

在 C++ 中,空类确实是合法的。

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

struct S {
int : 5;
};

在上述情况下,行为是未定义的。这就是上面引述的内容。

关于c++ - 空结构定义在 C 中是非法的,但在 C++ 中不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2849901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com