2017-06-20 29 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類型的變量。