0

可能重复:
'unsigned temp:3' 是什么意思

Astruct的定义是这样的,

typedef struct
{   
    uint32_t length : 8;  
    uint32_t offset : 24;
    uint32_t type : 8;
} A;

我以前没见过这种定义,:8and是什么意思:24

4

3 回答 3

6

它正在定义位域。这告诉编译器length是 8 位,offset是 24 位,type也是 8 位。

于 2012-07-20T09:37:50.250 回答
3

请参考以下链接。它们是位域。http://www.cs.cf.ac.uk/Dave/C/node13.html
http://en.wikipedia.org/wiki/Bit_field

#include <stdio.h>

typedef unsigned int uint32_t;

#pragma pack(push, 1)
typedef struct
{
    uint32_t length : 8;
    uint32_t offset : 24;
    uint32_t type : 8;
} A;

typedef struct
{
    uint32_t length;
    uint32_t offset;
    uint32_t type;
} B;
#pragma pack(pop)

int main()
{
  printf("\n Size of Struct: A:%d   B:%d", sizeof(A), sizeof(B));
  return 0;
}

结构 A 的大小为 5 个字节,而 B 的大小为 12 个字节。

于 2012-07-20T09:39:07.980 回答
1

该符号定义了位域,即该结构变量的位数大小。

于 2012-07-20T09:43:44.930 回答