我目前正在嘗試對結構數組執行編譯時檢查,以確保如果有人在將來更改它,數組的每個元素都被定義。我想避免某個人向結構數組中添加太多元素的情況,如果我明確設置數組大小,這可能是可能的。這並不包括某人在數組中定義了太少元素的情況,其餘元素只是零初始化。C預定義錯誤檢查定義數組元素
#include <stdio.h>
typedef struct myStruct {
int a;
int b;
} myStruct_t;
#define ARRAY_SIZE (3)
myStruct_t sArr[] = {
{0, 0},
{1, 1},
{2, 2}
}
#define RATIO (sizeof(sArr)/sizeof(myStruct_t))
#if ARRAY_SIZE != RATIO
#error API issue
#endif
int main(void) {
printf("Testing\n");
return 0;
}
這似乎是一個聲音檢查,因爲sizeof()
是在編譯時評估。但是編譯器報告:
test.c:15:12: error: missing binary operator before token "("
test.c:19: error: expected ',' or ';' before 'int'
如果可能,我該如何執行這樣的檢查?
謝謝。
'}'關閉'sArr'聲明後需要分號。 – TypeIA
#define RATIO(sizeof(sArr)/ sizeof(myStruct_t))在編譯時得到擴展但未被評估... –