小编N. *_*aul的帖子

结构声明中是否允许使用额外的分号?

这个问题仅仅是好奇心.它不是关于空结构.

我偶然发现了一个有趣的错字

struct {
     int member1; /*comment*/ ; /* <-- note the ';' */
     int member2;
} variable[] = { /* initializers */ };
Run Code Online (Sandbox Code Playgroud)

编译器(xc32,派生自gcc)接受,没有任何投诉.当然,我纠正了这一点,但软件在纠正之前和之后运行顺利,而且额外的;看似没有问题.然后,我尝试了;;;结构定义中的各种长度,它们似乎对功能和功能都没有任何区别sizeof.所以在struct任何序列中;;;;似乎都等同于单一;.

我在规范中找不到关于结构/联合的这种"空成员"的任何内容,既不允许它们也不允许它们被禁止.对我来说,似乎语法拒绝了他们.这与;编译单元顶层的"空声明"形成对比,标准明确禁止该标准,并且功能中的"空"声明;是明确允许的语言特征.

有谁知道这种行为?它是编译器特定的还是C规范以某种方式容忍这样的空结构成员?

c gcc language-lawyer

6
推荐指数
2
解决办法
217
查看次数

标签 统计

c ×1

gcc ×1

language-lawyer ×1