这个问题纯粹是出于好奇。 不是空结构。
我刚刚偶然发现了一个有趣的拼写错误
struct {
int member1; /*comment*/ ; /* <-- note the ';' */
int member2;
} variable[] = { /* initializers */ };
编译器(xc32,派生自 gcc)没有任何接受
投诉。当然,我更正了这个,但软件正在运行
修正前后顺利,加上;
貌似
没有问题。然后我在结构定义中尝试了各种长度的 ;;;
它们似乎对功能没有影响
也不是 sizeof
。所以在 struct
中,;;;;
的任何序列似乎都是
相当于单个 ;
.
我找不到任何关于结构/union 的“空成员”的信息
在规范中,既不允许也不允许
不允许。在我看来,语法似乎拒绝了它们。这对比
到编译单元顶层的“空声明”;
,其中
标准明确禁止函数中的“空”语句 ;
明确允许的语言功能。
有人知道这种行为吗?它是编译器特定的还是 C 规范以某种方式容忍这种空结构成员?
最佳答案
语法在 C11 6.7.2.1 中指定
struct-declaration:
specifier-qualifier-list struct-declarator-listopt ;
static_assert-declaration
末尾有 1 个分号,因此这是唯一允许的语法。您不能跳过分号,也不能添加额外的分号。就是这样。
(但是,您可以在 C11 的结构声明中使用静态断言。)
关于c - 结构声明中是否允许额外的分号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49529130/