[問題] enum給-1會變成255?

作者: henry4343 (henry)   2016-06-26 17:02:59
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
MinGW
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
請問一下,我寫了一個enum, 裡面有3個變數都沒有給初始值,所以第一個變數應該是0才
對。
然後我宣告了一個enum變數,給值-1,但是我用printf引出來發現此變數的值變成255
請問這跟compiler有關嗎? 有辦法避免嗎? 感謝
餵入的資料(Input):
Enum test = -1
預期的正確結果(Expected Output):
test = -1
錯誤結果(Wrong Output):
test == 255
程式碼(Code):(請善用置底文網頁, 記得排版)
enum = -1;
if ( enum != -1)
........
補充說明(Supplement):
因為把enum設成-1,所以以為不會進下面的判斷式,但結果卻進去了,把值印出來看發現
變成255
作者: soheadsome (師大狗鼻哥)   2016-06-26 17:53:00
因為enum是unsigned
作者: henry4343 (henry)   2016-06-26 19:03:00
我以為enum是integer?
作者: LPH66 (-6.2598534e+18f)   2016-06-26 19:29:00
原 PO 貼個程式吧, enum 的預設底層型態是 int 是能為負的不過一個 enum 給定範圍外的值會如何是 unspecified所以可能需要加一個 enum 成員其值為 -1(話說回來, 這基本上就是個「以上皆非」的選項,既然是選項寫入 enum 也是應該的)
作者: steve1012 (steve)   2016-06-26 22:01:00
新的enum class 可以自己選想要的底 int unsigned 都行建議可以用新的不過為何需要對enum 取值阿 這應該不是他的原意吧如果是要表示 其他/預設的話 再加個dummy 就好了
作者: CoNsTaR ((const *))   2016-06-27 00:15:00
可能把 enum 當 #define 用吧?
作者: LPH66 (-6.2598534e+18f)   2016-06-27 01:53:00
認真的, 列舉類的值用 enum 才是正道
作者: CoNsTaR ((const *))   2016-06-27 04:53:00
是啊 文字替換才是 #define 的工作
作者: henry4343 (henry)   2016-06-27 09:22:00
我不是對enum給值喔, 我是宣告一個enum變數 然後給-1typedef enum Type; Type test = -1; 這樣
作者: xvid (DivX)   2016-06-27 09:49:00
preprocessor有scope的缺點阿
作者: steve1012 (steve)   2016-06-27 10:25:00
那constexpr呢為啥要給enum 一個底層的質阿
作者: CoNsTaR ((const *))   2016-06-27 22:45:00
constexpr 用途較廣吧 單純列舉當然用 enum

Links booklink

Contact Us: admin [ a t ] ucptt.com