我经常使用超过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)