我试图定义一个结构,它允许直接设置一个字节值,也允许在不使用bit_set()、bit_clear()等函数的情况下操作字节的位。
这是我的定义

typedef union FLAG_WORK {
    volatile unsigned char BYTE;
    struct {
        volatile unsigned char bit0:1;
        volatile unsigned char bit1:1;
        volatile unsigned char bit2:1;
        volatile unsigned char bit3:1;
        volatile unsigned char bit4:1;
        volatile unsigned char bit5:1;
        volatile unsigned char bit6:1;
        volatile unsigned char bit7:1;
    }BIT;
}FLAG8;

以及一个示例代码
int main()
{
    FLAG8 i;
    i.BYTE=(unsigned char)0; // initial the value of i.BYTE
    i.BIT.bit0 = 1; // set bit0 of i.BYTE
    i.BIT.bit1 = 1;
    cout << (int)i.BYTE << endl;
    cout << "Hello world!" << endl;
    return 0;
}

我只是想知道如何修改结构,使我可以分配值给“我”在上面的代码直接?
有什么建议吗?

最佳答案

C99允许显式初始化成员。假设我正确理解你的问题,你正在寻找

FLAG8 i = { .BIT = { .bit2 = 1, .bit5 = 1 } };
FLAG8 j = { .BYTE = 42 };
FLAG8 k = { 42 }; // same as j as initializing the first member is default

08-16 14:08
查看更多