我遇到了一个以前从未见过的位域语法。

       struct msg_hdr0{
                        uint8_t a  : 1,
                        b         : 1,
                        e         : 4,
                        f         : 2;
               };

     int main(void)
     {
     struct msg_hdr0 hdr;

     bzero((void *)&hdr, sizeof(hdr));
     hdr.b = 1;

     printf("hdr = 0x%X\n", *(uint32_t *)&hdr);

     return 0;
     }

这在linux&gcc编译器上工作正常。
谁能建议我在哪里可以找到任何文档。
这是GCC扩展名吗?

常见的位域语法为:
    struct box_props
   {
 unsigned int opaque       : 1;
 unsigned int fill_color   : 3;
 unsigned int              : 4; // fill to 8 bits
 unsigned int show_border  : 1;
 unsigned int border_color : 3;
 unsigned int border_style : 2;
 unsigned int              : 2; // fill to 16 bits
};

最佳答案

在函数中,您可以在单个语句或多个语句中声明变量列表。

void myFunction(void)
{
    // Declare several variables (of teh same type) in a single statement
    int a, b, c;
    // Declare some more, each in their own statement
    int x;
    int y;
    int z;
}

同样,结构中的位字段。
struct myStruct
{
    // Declare several bitfields in a single statement
    int a : 1, b : 3, c : 4;
    // Declare some more, each in their own statement
    int x : 1;
    int y : 3;
    int z : 4;
}

关于c - 位域声明的语法异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28041996/

10-11 19:32