代码之家  ›  专栏  ›  技术社区  ›  Petr Skocik

6.3.1.1p2要点2的含义

  •  1
  • Petr Skocik  · 技术社区  · 7 年前

    6.3.1.1p2

    int unsigned int 可用于:

    • 整数类型的对象或表达式(除 int 无符号整型 )其整数转换秩小于或等于 int .

    • 类型的位字段 _Bool , signed int 无符号整型

    第二个要点背后的意图是什么?

    为什么要省略秩小于的其他类型的整型字段 int ?

    这是否意味着我可以做到,例如:

    printf("%d\n", (struct{ _Bool x:1; }){0}.x);
    

    但不是:

    printf("%d\n", (struct{ unsigned short x:1; }){0}.x);
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   melpomene    7 年前

    这大概是因为 6.7.2.1p5 :

    位字段的类型应为合格或不合格版本 _Bool signed int , unsigned int

    也就是说,您无论如何都不能以可移植的方式创建其他类型的位字段。