我必须为学校做一个项目。但我一开始就卡住了。
我必须为位域定义类型。这不是问题,它看起来像这样:
typedef struct {
unsigned flag1 : 1;
unsigned flag2 : 1;
}BitArray;
但下一个任务是做一组宏来处理位域。其中之一是:
create(field_name,size) /* defines and initializes bitfield */
问题是我如何 typedef bitfield 以便以后可以更改其成员的数量?
我想到的第二种方法是使用 bool 数组。但同样,我怎样才能 typedef bool 数组?起初我试过:
typedef bool BitArray[]; //new identifier BitArray for bool array
BitArray Array[5]; //new BitArray variable Array - this line would be in the macro mentioned above
没过多久我就意识到这是行不通的。但是我可以这样做:
typedef bool BitArray;
BitArray Array[5];
但它只是为 bool 命名标识符。
我希望我的帖子有意义,并感谢您提供的任何建议。
最佳答案
The question is how can I typedef bitfield so I could change number of its members later?
这就是 typedef struct ... BitArray
所做的。不需要额外的类型。
bool 数组很可能不会编译成按位代码,它可能会编译成字节数组,这不是您想要的。
此外,将数组或指针隐藏在 typedef 后面是一个非常糟糕的主意,这样它们看起来就不再像数组或指针了。
一些建议:
I have to define type for bitfield
I would not recommend to use bit fields for any purpose what-so-ever .您应该质疑您的老师,为什么他们要教您使用 C 语言中危险且指定不当的部分。
But next task is to do set of macros for working with bitfield
你应该问问你的老师,为什么他们教你使用类似函数的宏而不是正确的函数。使用类似函数的宏可能是您在 C 语言中做过的最糟糕的事情:它们很危险,不可读,难以调试,难以维护。
将类似函数的宏与位域混合在一起似乎是一个真的愚蠢的想法,但这当然只是我个人的看法。安全且 100% 可移植的方法是在字节级变量上使用带掩码的位运算符,例如:
uint8_t my_var=0;
my_var |= 0x80; // set msb, bit 7
my_var &= ~0x80; // clear msb, bit 7
关于C位域/数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28985776/