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

看板C_and_CPP作者 (henry)時間9年前發表 (2016/06/26 09:03), 9年前編輯推噓8(8012)
留言20則, 6人參與, 最新討論串1/1
開發平台(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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.33.120 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1466931782.A.3BB.html ※ 編輯: henry4343 (39.10.33.120), 06/26/2016 17:04:01

06/26 17:53, , 1F
因為enum是unsigned
06/26 17:53, 1F

06/26 19:03, , 2F
我以為enum是integer?
06/26 19:03, 2F

06/26 19:29, , 3F
原 PO 貼個程式吧, enum 的預設底層型態是 int 是能為負的
06/26 19:29, 3F

06/26 19:31, , 4F
不過一個 enum 給定範圍外的值會如何是 unspecified
06/26 19:31, 4F

06/26 19:31, , 5F
所以可能需要加一個 enum 成員其值為 -1
06/26 19:31, 5F

06/26 19:32, , 6F
(話說回來, 這基本上就是個「以上皆非」的選項,
06/26 19:32, 6F

06/26 19:33, , 7F
既然是選項寫入 enum 也是應該的)
06/26 19:33, 7F

06/26 22:01, , 8F
新的enum class 可以自己選想要的底 int unsigned 都行
06/26 22:01, 8F

06/26 22:01, , 9F
建議可以用新的
06/26 22:01, 9F

06/26 22:02, , 10F
不過為何需要對enum 取值阿 這應該不是他的原意吧
06/26 22:02, 10F

06/26 22:04, , 11F
如果是要表示 其他/預設的話 再加個dummy 就好了
06/26 22:04, 11F

06/27 00:15, , 12F
可能把 enum 當 #define 用吧?
06/27 00:15, 12F

06/27 01:53, , 13F
認真的, 列舉類的值用 enum 才是正道
06/27 01:53, 13F

06/27 04:53, , 14F
是啊 文字替換才是 #define 的工作
06/27 04:53, 14F

06/27 09:22, , 15F
我不是對enum給值喔, 我是宣告一個enum變數 然後給-1
06/27 09:22, 15F

06/27 09:23, , 16F
typedef enum Type; Type test = -1; 這樣
06/27 09:23, 16F

06/27 09:49, , 17F
preprocessor有scope的缺點阿
06/27 09:49, 17F

06/27 10:25, , 18F
那constexpr呢
06/27 10:25, 18F

06/27 10:26, , 19F
為啥要給enum 一個底層的質阿
06/27 10:26, 19F

06/27 22:45, , 20F
constexpr 用途較廣吧 單純列舉當然用 enum
06/27 22:45, 20F
文章代碼(AID): #1NRvf6Ex (C_and_CPP)