현재 배열 구조체에 대한 컴파일 타임 검사를 구현하여 다른 사람이 나중에 배열을 변경하면 배열의 모든 요소가 정의되는지 확인하려고합니다. 나는 누군가가 struct-of-struct에 너무 많은 요소를 추가하는 경우를 피하고자한다. 배열의 크기를 명시 적으로 설정하면 가능하다. 이것은 누군가가 배열에 너무 적은 수의 요소를 정의하고 나머지 요소는 단지 0으로 초기화되는 경우를 포함하지 않습니다.정의 된 배열 요소에 대한 사전 처리기 오류 검사
#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))는 확장되었지만 컴파일 타임에 평가되지 않습니다 ... –