我想防止無效值枚舉賦值。我知道,如果我甚至指定的值不是枚舉,它將起作用。例如:如何保護枚舉賦值
enum example_enum
{
ENUM_VAL0,
ENUM_VAL1,
ENUM_VAL2,
ENUM_VAL3
};
void example_function(void)
{
enum example_enum the_enum = ENUM_VAL3; // correct
the_enum = 41; // will work
the_enum = 43; // also will work
bar(the_enum); // this function assumes that input parameter is correct
}
是否有簡單有效的方法來檢查賦值枚舉是否正確?我可以通過功能
void foo(enum example_enum the_enum)
{
if (!is_enum(the_enum))
return;
// do something with valid enum
}
測試值,我可以在下面的方法解決此問題:
static int e_values[] = { ENUM_VAL0, ENUM_VAL1, ENUM_VAL2, ENUM_VAL3 };
int is_enum(int input)
{
for (int i=0;i<4;i++)
if (e_values[i] == input)
return 1;
return 0;
}
對於我來說,我的解決方案是低效的,我怎麼可以這樣寫,如果我有更多的枚舉和多個值枚舉?
編譯器警告也許是:功能和
struct
實現可以從用戶通過在.h
文件預先聲明,並在.c
文件的執行被藏起來? –使用斷言。在C中'enum's實際上是'int'。 C不是C++。 – Olaf