2012-04-24 4 views
6

객관적인 C에서 런타임 중에 값을 열거 형에 할당하는 방법이 있습니까? 저는 열거 형을 여러 개 갖고 있으며 각 열거 형에 특정 값을 지정하려고합니다. 값은 xml 파일에서 읽을 수 있습니다. 이것을 할 수있는 방법이 있습니까?런타임시 enum 값을 변경 하시겠습니까?

답변

16

Unfortunatley는, @Binyamin이 올바른지, 당신은 열거으로이 작업을 수행 할 수 없습니다. 이러한 이유로, 나는 보통 내 프로젝트에서 다음을 수행하십시오

// in .h 
typedef int MyEnum; 

struct { 
    MyEnum value1; 
    MyEnum value2; 
    MyEnum value3; 
} MyEnumValues; 

// in .m 
__attribute__((constructor)) 
static void initMyEnum() 
{ 
    MyEnumValues.value1 = 10; 
    MyEnumValues.value2 = 75; 
    MyEnumValues.value3 = 46; 
} 

이것은 또한 정상적인 열거 가능하지 않은, 값을 반복 할 수 있다는 장점이 있습니다

int count = sizeof(MyEnumValues)/sizeof(MyEnum); 
MyEnum *values = (MyEnum *) &MyEnumValues; 

for (int i = 0; i < count; i++) 
{ 
    printf("Value %i is: %i\n", i, values[i]); 
} 

을 대체로 C에서 열거 형을 사용하는 것이 좋습니다.

+0

@ Richard .. __attribute __ ((생성자)) 무엇인지 설명해 주시겠습니까? 대답 주셔서 감사합니다. –

+1

@learningDroid 대상이로드되기 직전에 호출되는 함수를 만들 수있는 GCC 확장 (dylib에서 dylib의 첫 번째 함수가 실행되기 전에 응용 프로그램에서 'main()'바로 앞에 위치 함) . 매우 유용한 구조이며, 무거운 짐을 들지 않는 한 괜찮을 것입니다. –

+0

구조체의 xum 파일을 읽고 enum에 값을 할당 할 계획입니다. 코드가 실행되는 데 5 초 미만의 시간이 소요되는 한 __attribute 메서드 –

5

아니요, 열거 형 정보는 컴파일 할 때 지워집니다.

+4

불행히도이 경우입니다. 그러나 당신은 정보를 보유하려는 경우 열거 형 대신 구조체를 사용할 수 있습니다. –