我有一个返回浮点数的函数:
float function(enum value)
然后我有一个枚举
typedef enum
{
a = 0,
b,
c
} myenum;
我想做以下事情:
function(a+1);
我想知道如果枚举更改,除了出现意外行为的风险之外是否存在任何风险。我的问题可能看起来很愚蠢,但我必须确保不存在我正在做的事情的风险。
请不要问这样做的原因。因为我不知道。我只需要知道它是否安全。
答案 0 :(得分:4)
这是安全的。此外,该标准保证在您描述的方案中a+1
为b
且a+2
为c
:
C99标准,第6.7.2.2节,第3部分:如果第一个枚举数没有
=
,则其枚举常量的值为0
。每个后续的没有=
的枚举器将其枚举常量定义为通过将1
添加到前一个枚举常量的值而获得的常量表达式的值。
答案 1 :(得分:1)
这很安全。正如你似乎认识到自己一样,它确实与枚举的工作方式有关,这就像任意标签一样。但是,有时您需要订购这样的< b< C。如果在某种意义上a = 0且b = 1且c = 2,那么你不需要枚举,但是,你想要一个int类型的变量。