有沒有辦法在運行期間在目標c中爲枚舉賦值? 我有幾個枚舉,並希望每個枚舉具有一定的價值。 這些值可以從xml文件中讀取。有沒有辦法做到這一點?在運行時更改枚舉值?
6
A
回答
16
抱歉,系統@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
不幸的是,這是事實。然而,如果你想持有這些信息,你可以使用結構而不是枚舉。 – 2012-04-24 20:16:27
相關問題
- 1. 運行時更改枚舉Java
- 2. 在運行時創建/修改枚舉
- 3. 在運行時枚舉UISupportedExternalAccessoryProtocols
- 4. 更改枚舉類型值
- 5. 如何在運行時更改枚舉(Java)
- 6. 在C#運行時填充/更新枚舉值
- 7. 運行時輸入枚舉
- 8. 如何在枚舉類型僅在運行時知道枚舉枚舉?
- 9. C#在運行時切換枚舉
- 10. 在運行時枚舉類的事件
- 11. 如何在運行時在組合框上隱藏枚舉值?
- 12. 當枚舉值不在枚舉中時賦予枚舉的默認值
- 13. Swift枚舉:在值更改上執行代碼?
- 14. wcf - 在更改整數值時向後兼容枚舉?
- 15. 如何在運行時訪問任何已知的枚舉值時被傳爲枚舉一個字符串值?
- 16. iPhone - 枚舉時更改數組
- 17. 如何在運行時爲枚舉成員賦值?
- 18. 在運行時生成jpa enum的db枚舉值
- 19. 在運行時從web.config獲取枚舉值
- 20. GSON:如何更改枚舉
- 21. 更改scala枚舉編號
- 22. 更改枚舉顯示
- 23. 枚舉更改事件
- 24. 更改枚舉的功能
- 25. 運行時枚舉scala中的描述
- 26. 編譯/運行時Java枚舉評估
- 27. 枚舉和類 - 運行時錯誤!
- 28. 修改枚舉關聯值
- 29. 運行時appconfig值更改
- 30. 駱駝藍圖:在枚舉值枚舉
@ Richard ..請你解釋什麼是__attribute __((構造函數))..謝謝你的答案 – 2012-04-24 20:30:21
@learningDroid它是一個GCC擴展,它允許你創建一個在目標加載之前被調用的函數(在dylib中,它將在dylib的第一個函數運行之前,在應用程序中,它在'main()'之前) 。一個非常有用的構造,只要你沒有沉重的舉動,你應該沒問題。 – 2012-04-24 20:32:47
我打算讀取一個xml文件併爲結構體中的枚舉賦值。你認爲__attribute方法 – 2012-04-24 20:34:27