有沒有一種簡單的方法在C中弄清楚枚舉是否包含某個元素?找出元素是否在枚舉中
1
A
回答
11
No. C沒有反射,枚舉基本上只是作用域,相關的整型常量。
0
基本上,唯一的選擇是grep聲明它的文件。
1
其實也許吧。
如果你有一個像枚舉:
ErrorType { BAD_ERROR = 0, REALLY_BAD_ERROR=1, MAXNUM_ERROR }
然後,每當你得到一個ErrorType
,你可以檢查,看看:
int error;
error = REALLY_BAD_ERROR;
error = 6;
if (error < MAXNUM_ERROR) { /* error is valid */ }
有點一個黑客攻擊,但。僅適用於順序枚舉(如果REALLY_BAD_ERROR
爲3,並且沒有2,則會中斷)。
2
非一般情況。有些人採用約定的線沿線的:
enum xxx
{
xxx_min = 0,
xxx_a = 0,
xxx_b = 1,
...
xxx_z = 42,
xxx_max = 42
};
#define check_enum(e,n) assert((n)>= e##_min && (n) <= e##_max)
這當然假定枚舉值是連續的,並要求從開發商(S)很多學科,所以可能會或可能不會是一個好主意取決於上下文。
2
是的,有一種方法來檢查它的枚舉的一部分,只要enum被初始化。
enum value
{
ENUM_MIN = 0,
.
.
.
.
.
ENUM_MAX
};
假設你有int x = -1;
if(x>ENUM_MIN && x< ENUM_MAX)
printf(" Part of enum");
在以下情況下,這不會工作:
enum value
{
ENUM_MIN = 0,
ENUM_TWO =2,
.
.
.
ENUM_MAX
};
如果x
值等於1
,那麼你就不能使用上面的解決方案。
相關問題
- 1. XSD元素和枚舉
- 2. 枚舉拋出「不是枚舉類型」
- 3. C#枚舉如何檢查枚舉中是否存在描述
- 4. 是否有可能在enum中枚舉枚舉?
- 5. 在枚舉中枚舉是否有一個通用的方法?
- 6. Java枚舉找到枚舉
- 7. 在枚舉中枚舉
- 8. 找出最大值在枚舉
- 9. Dapper是否支持枚舉?
- 10. 是否需要枚舉string.ToCharArray()?
- 11. C#枚舉 - 是否爲空?
- 12. 是枚舉Java中的枚舉
- 13. `typedef enum {} t`是否允許C++ 0x中的範圍枚舉元素標識符?
- 14. 如何命名我的枚舉元素?
- 15. 如何枚舉asp.net HTML元素的JavaScript
- 16. 使用JavaScript枚舉CSS樣式元素
- 17. 分配多個值枚舉元素
- 18. Boost枚舉256元素限制
- 19. 使用JsonConverter,枚舉元素的值
- 20. 檢查是否存在C枚舉
- 21. 如何檢查是否在枚舉
- 22. 是否從枚舉MailboxType中缺少GroupMailBox?
- 23. 在python中使用枚舉()時從列表中刪除元素
- 24. 將charSequence元素轉換爲枚舉元素
- 25. Java在枚舉中的枚舉
- 26. 在枚舉枚舉中調用.Distinct()
- 27. 枚舉在Hibernate中,堅持爲枚舉
- 28. 在枚舉語句中枚舉mysql枚舉
- 29. 是否可以確定一個C++枚舉類的元素的數量?
- 30. Java枚舉:列出Class <?中的枚舉值擴展枚舉>