3

首先,有可能做到吗?如果是,我在下面的声明中做错了什么?

struct mybitfields
{
    uint8_t a : 4;
    uint16_t c : 12;
} test;
4

2 回答 2

4

Although what you are doing is possible, it is not portable: C99 standard says that bit-field base type must be a _Bool, signed int, or unsigned int, allowing implementation-defined types to be used with bit-fields (C90 requires a signed on an unsigned intas bit-field's base type; no other types are allowed).

See this answer for references to appropriate chapters of the C99 and C90 standards.

If your goal is to define a struct of bit-fields of size that is smaller than an unsigned int, you would be better off using bit shifts for portability.

于 2013-04-22T21:40:15.053 回答
3

Your code will be accepted by most compilers, but strictly speaking the base type of a bitfield must be a (signed / unsigned) int.

uint8_t is a typedef for unsigned char, and uint16_t is probably a typedef for unsigned short, and bitfields made from these types are non-conforming.

于 2013-04-22T21:41:32.007 回答