我认为使用C位字段代替int和一堆#define可以使代码更易读,并减少添加新字段时改编现有代码的需要。如int-#define -method提供的那样,是否有可能通过单个命令将C位域中的所有位重置为零?

例子:

#define MYFLAG_1 0x01
#define MYFLAG_2 0x02
#define MYFLAG_3 0x04

int myflags = MYFLAG_1 | MYFLAG_3;

/* Reset: */
myflags = 0;


struct {
    int flag_1 : 1;
    int flag_2 : 1;
    int flag_3 : 1;
} myflags;

myflags.flag_1 = 1;
myflags.flag_3 = 1;

/* Reset: */
myflags.flag_1 = 0;
myflags.flag_2 = 0;
myflags.flag_3 = 0;

向该字段添加其他标志将不需要对第一个示例的现有代码进行任何更改(除#define之外),但将需要代码来重置其他标志字段。

最佳答案

我只是建议:

memset(&my_flags, 0, sizeof(myflags));

这样,您仍然可以将字段添加到您的结构中,由于sizeof,它们将被重置。

关于c - 重置c位域中的所有位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27121427/

10-11 23:13