struct _USBCHECK_FLAGS
    {
        unsigned char   DEVICE_DEFAULT_STATE       : 1;
        unsigned char   DEVICE_ADDRESS_STATE       : 1;
        unsigned char   DEVICE_CONFIGURATION_STATE : 1;
        unsigned char   DEVICE_INTERFACE_STATE     : 1;
        unsigned char   FOUR_RESERVED_BITS         : 8;
        unsigned char   RESET_BITS                 : 8;
    } State_bits;

:1:8是什么意思?

推荐答案

这些都是位字段.基本上,冒号后面的数字描述了该字段使用的位数.下面是描述位字段的quote from MSDN:

常量表达式以位为单位指定字段的宽度.这个

无法引用未命名的位字段,其内容在运行时

此示例定义了一个名为Screen的二维 struct array.

struct 
{
    unsigned short icon : 8;
    unsigned short color : 4;
    unsigned short underline : 1;
    unsigned short blink : 1;
} screen[25][80];

编辑:MSDN链接中的另一个重要内容:

位字段的语义与整数类型相同.这意味着

一个简单的例子很好地说明了这一点.有趣的是,对于混合类型,编译器似乎默认为sizeof (int).

  struct
  {
    int a : 4;
    int b : 13;
    int c : 1;
  } test1;

  struct
  {
    short a : 4;
    short b : 3;
  } test2;

  struct
  {
    char a : 4;
    char b : 3;
  } test3;

  struct
  {
    char a : 4;
    short b : 3;
  } test4;

  printf("test1: %d\ntest2: %d\ntest3: %d\ntest4: %d\n", sizeof(test1), sizeof(test2), sizeof(test3), sizeof(test4));

测试1:4

测试2:2

测试3:1

测试4:4

C++相关问答推荐

C中的整字母后缀i是什么

为什么listen()(在调用accept()之前)足以让应用程序完成3次握手?

Zig将std.os.argv转换为C类型argv

intellisense不工作,甚至已经下载了c/c++扩展

为什么在此程序中必须使用Volatile关键字?

GLIBC:如何告诉可执行文件链接到特定版本的GLIBC

平均程序编译,但结果不好

#定义SSL_CONNECTION_NO_CONST

关于scanf()和空格的问题

为什么未初始化的 struct 的数组从另一个数组获取值?

从另一个宏函数调用C宏

与外部SPI闪存通信时是否应禁用中断?

OMP并行嵌套循环

在我的函数中实现va_arg的问题

分支预测和UB(未定义的行为)

从系统派生线程调用CRT

gdb - 你能找到持有内部 glibc 锁的线程吗?

无法将字符串文字分配给 C 中的字符数组

既然我们在 if 中将 int 的值更改为 10,为什么在第二个 fork 后,子进程及其创建的子进程都会打印 33 ?

使用 _Atomic float 时,MSVC 编译的代码会命中调试断言