実行時に客観的なcの値をenumに割り当てる方法はありますか? 私はいくつかの列挙型を持っており、それぞれの列挙型に特定の値を持たせたいと考えています。 値はxmlファイルから読み取ることができます。これを行う方法はありますか?実行時に列挙型の値を変更しますか?
6
A
答えて
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で列挙型を行うのが私の好みの方法です。
5
いいえ、列挙情報はコンパイル時に消去されます。
+4
残念なことに、これが当てはまります。しかし、情報を保持したい場合には、列挙型の代わりに構造体を使用することができます。 –
@ Richard .. __attribute __((コンストラクタ))について説明してください... –
@learningDroidターゲットがロードされる直前に呼び出される関数を作成することができるGCC拡張機能(dylibでは、dylibの最初の関数が実行される前にアプリケーション内で 'main()'の直前にあります) 。非常に便利な構造物です。そして、あなたが重たいことをしない限り、あなたは大丈夫でしょう。 –
私はxmlファイルを読み込み、構造体の列挙型に値を割り当てることを計画しています。 __attributeメソッド –