2010-07-28 79 views

回答

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,那麼你就不能使用上面的解決方案。