2012-02-23 1 views
1

구조체 MyStruct의 정적 배열이 있습니다. 인덱스로 배열에 액세스해야하지만 인덱스가 무엇인지 알기 위해서는 모든 MyStruct도 필요합니다. 현재 다음 코드를 사용합니다 :배열 (배열)에있는 항목 (구조체)의 정적 배열

enum { INDEX_FOO=0, INDEX_BAR, INDEX_BAZ }; 
struct MyStruct{ int index; const char* name; /* other data */ }; 
struct MyStruct values[]={ 
    { INDEX_FOO, "foo" /* ... */ }, 
    { INDEX_BAR, "bar" /* ... */ }, 
    { INDEX_BAZ, "baz" /* ... */ }, 
}; 
// requirement: for all i in {0,1,2}: values[i].index==i 

그러나 열거 형 인덱스는 중복됩니다. 열거 형과 배열을 동기화하지 않고도이 작업을 수행 할 수 있습니까?

답변

3

이 경우 X-macros을 고려할 수 있습니다.

뭔가 같은 : X-매크로의 존재를 언급에 대한

blah.x

X(FOO, "foo") 
X(BAR, "bar") 
X(BAZ, "baz") 

main.c를

#define X(a,b) INDEX_#a, 
enum { 
#include "blah.x" 
}; 
#undef X 

#define X(a,b) { INDEX_#a, b }, 
struct MyStruct values[]={ 
#include "blah.x" 
}; 
#undef X 
+0

+1 – ouah