【发布时间】:2018-03-28 08:02:23
【问题描述】:
这个问题只是出于好奇。 不是关于空结构的。
我只是偶然发现了一个有趣的错字
struct {
int member1; /*comment*/ ; /* <-- note the ';' */
int member2;
} variable[] = { /* initializers */ };
编译器(xc32,源自 gcc)没有任何接受
投诉。当然,我纠正了这个,但软件正在运行
前后顺利修正和附加;貌似
不会引起任何问题。然后我在结构定义中尝试了各种长度的;;;,它们似乎对功能都没有影响
也不是sizeof。因此,在struct 中,;;;; 的任何序列似乎都是
相当于单个;。
我找不到任何关于结构/联合的“空成员”的信息
在规范中,它们既不被允许也不被允许
不允许。在我看来,语法似乎拒绝了它们。这对比
在编译单元的顶层“空声明”;
标准明确禁止并且函数中的“null”声明;
明确允许的语言功能。
有人知道这种行为吗?它是编译器特定的还是 C规范以某种方式容忍这种空结构成员?
【问题讨论】:
-
但是,普通语句(如
x=y+2;或puts("aa");或块)不能出现在struct定义中。为什么里面可以出现空的statements,而其他类型的statements却不行? -
@P.P.不是重复的。这个分号在
struct声明中。 不是空语句。 -
@P.P.这不是真正的重复。
;不是声明中的语句。我的回答是没有实际意义的,我已将其删除。 -
@Jean-FrançoisFabre 我已经重新打开它了。
-
您的实际代码有 3 个迂腐错误...rextester.com/XKKK47051
标签: c gcc language-lawyer