为什么`struct T {double x};`的输出在C和C++中有所不同?

Ani*_*aul -4 c c++ struct language-lawyer

struct T{ double x};
Run Code Online (Sandbox Code Playgroud)

在C中,它没有任何问题.

但在C++中,它给出了以下编译错误:

预期';' 在会员声明结束时.

Ker*_* SB 12

从C11开始,"结构和联合说明符,语法"(6.7.2.1/1):

struct-declaration:
    specifier-qualifier-list struct-declarator-list opt ;

结构的每个元素以分号结尾.您声称"没有问题"的说法不是基于C规范所说的.如果编译器接受此类代码,则它不是符合C的编译器,或者您没有正确使用它.(有些编译器具有可配置的标准一致性级别.)

  • @SouravGhosh:"请详细解释不受任何规范或惯例约束的操作的可能结果." (4认同)
  • 对,先生,但是如果你可以添加一些关于为什么编译器不会产生错误的信息,这将是好的.OP似乎期望这应该是语法错误,但编译器不会生成任何语法错误.为什么? (2认同)
  • 基本上我问,为什么编译器认为"没问题"? (2认同)