如何检查大结构中的所有字段由编译器初始化

Rol*_*dXu 2 c c++

我经常使用超过20个字段的大结构,需要用不同的值初始化.每次我写init函数时,我都是忧郁症,我总是担心我错过了一个被分配值的字段.所以我必须逐个检查每个字段.

我讨厌这个,所以我使用像样本代码一样的CHECK_VAL宏.现在,如果我在结构初始化中遗漏了一个项目,编译器将报告错误:

"Check"类型的值不能用于初始化"int"类型的实体

我的问题:是否有其他方法可以帮助解决我的问题?语言是C和C++,大结构是POD类型.

代码示例

#define DOCHECK 1
#if DOCHECK
typedef struct _Check{
    char k;
} Check;
Check g_check = {'c'};
#define CHECK_DEL Check c1234567;
#define CHECK_VAL (g_check)
#else
#define CHECK_DEL
#define CHECK_VAL
#endif

typedef struct _BigStruct{
    int bar;
    int foo;
    /*...*/
    int f99;
    int f100;
    CHECK_DEL;
}BigStruct;

void initBigStruct(BigStruct* p){
    int a,b,c,d;
    a = b = c = d = 0;
    /*
        many other code to caculate the value of a,b,c,d
    */
    {
        BigStruct tmp = {a,b,c,d, CHECK_VAL};
        *p = tmp;
    }
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 5

从语言的角度来看,可能不是很多.

但是,GCC -Wmissing-field-initializers正是这种情况的标志.我敢肯定其他编译器会提供类似的东西.