2012-04-24 17 views
6

実行時に客観的なcの値をenumに割り当てる方法はありますか? 私はいくつかの列挙型を持っており、それぞれの列挙型に特定の値を持たせたいと考えています。 値はxmlファイルから読み取ることができます。これを行う方法はありますか?実行時に列挙型の値を変更しますか?

答えて

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

私はxmlファイルを読み込み、構造体の列挙型に値を割り当てることを計画しています。 __attributeメソッド –

5

いいえ、列挙情報はコンパイル時に消去されます。

+4

残念なことに、これが当てはまります。しかし、情報を保持したい場合には、列挙型の代わりに構造体を使用することができます。 –

関連する問題