經常我使用大於20的字段需要用不同的值初始化的字段。 每次我寫init函數的時候,我都是憂鬱症,我總是擔心我錯過了一個被賦予價值的領域。所以我必須逐個檢查每個字段。如何檢查大結構中的所有字段是由編譯器初始化的
我討厭這個,所以我使用CHECK_VAL宏,如示例代碼。 現在,如果我在struct初始化錯過了一個項目時,編譯器會報告錯誤:
a value of type "Check" cannot be used to initialize an entity of type "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;
}
}
感謝,這就是我想要的。 PS,看起來你的答案中的鏈接是錯誤的,你能幫助解決它嗎? – RolandXu