2017-06-20 64 views
1

我有一个返回浮点数的函数:风险函数调用来枚举

float function(enum value) 

然后我有一个枚举

typedef enum 
{ 
    a = 0, 
    b, 
    c 
} myenum; 

我要做到以下几点:

function(a+1); 

我不知道是否有任何风险除了意外行为的风险,如果枚举c绞车。我的问题可能看起来很愚蠢,但我必须确保我所做的事情没有风险。

请不要问为什么这样做的问题。因为我不知道。我只需要知道它是否安全。

+0

你有你的答案,显示的代码没有任何问题,但如果你不知道*为什么*你在做什么,那往往会要求麻烦......(我不想要要知道为什么,只是说*你真的应该知道) –

+0

你可以偷这个[制作类型安全的枚举]的技巧(https://stackoverflow.com/questions/43043246/how-to-create-type-安全-枚举)。 – Lundin

回答

4

这是安全的。此外,该标准保证a+1ba+2是在方案c你描述:

C99标准,部分6.7.2.2,第3部分:如果第一枚举没有=,值其枚举常量为0。没有=的每个随后的枚举器将其枚举常量定义为通过将1添加到先前的枚举常量的值中而获得的常量表达式的值。

1

这是安全的。正如你似乎认识到你自己,它确实在反对枚举打算工作的方式,这是任意标签。然而有时候你想要订购一个< b < c。如果a = 0且b = 1且c = 2在某种意义上,那么你不想要枚举,但是,你需要一个int类型的变量。