【问题标题】:Why there is a need for specifier-qualifier list?为什么需要说明符限定符列表?
【发布时间】:2012-04-07 16:58:37
【问题描述】:

我编译了这个(gcc 编译器):

#include <stdio.h>

main() {

    struct {
        a:1;
        b:2;
    } t;

    t.b=6;
    t.a=2;
    printf("%d %d",t.a,t.b);
}

显示的错误是:

“a”之前的预期说明符限定符列表

为什么在默认情况下将未命名的数据变量视为 int 时需要它。请解释...

【问题讨论】:

  • “未命名的数据变量默认被视为 int”:看起来你脑子里有一个非常旧的 C 版本。如果您使用-Wall 编译程序,您还应该收到main 的“非常规”声明的警告。
  • 您的代码上有更多 cmets:main() 应该是 int main(void);位字段通常应声明为unsigned;您分配给 t.bt.a 的值超出了它们必须保持的值范围。

标签: c gcc bit-fields specifier


【解决方案1】:

这是C language standard 所要求的。根据第 6.7.2.1 节第 4 部分:

位字段的类型应为 _Bool、signed int、unsigned int 或其他一些实现定义的类型的限定或非限定版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-13
    • 2011-07-02
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多