Re: [問題] 關於列舉

看板C_and_CPP (C/C++)作者 (我不要當胖狗)時間16年前 (2009/12/23 00:23), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《ChonPiggy (崇小豬)》之銘言: : ( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) : ( 未必需要依照此格式,文章條理清楚即可 ) : 遇到的問題: (題意請描述清楚) : # include <stdio.h> : # include <stdlib.h> : void main(){ : typedef enum {Mon,tue,wed,thu,fri,sat,sun}weekday_t; : weekday_t day = Mon + sat; : printf("day=%d\n",day); : system("pause"); : } : 希望得到的正確結果: : 我想說答案是5.. : 程式跑出來的錯誤結果: : 無法由'int'轉換為\weekday_t' : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) : VC++ : 有問題的code: (請善用置底文標色功能) : weekday_t day = Mon + sat; : 補充說明: : 如果只有單獨.. : weekday_t day = Mon; : 就可以印出0.. : 這樣答案我應該寫編譯錯誤嗎? 絕大多數的compiler是以int來處理enum 因此Mon,tue,...都被compiler當成 const int Mon = 0; const int tue = 1; etc 就算你宣告一個變數的型態是int 還是可以使用enum內的值 甚至是拿來做運算都可以 例如 int day = Mon; 又例如 typedef enum { Jan, Feb, blah blah bla} month_t; int aaa = Mon + Feb * 5; 都可以 但是如果變數的型態為enum的話 就必須明確的使用enum內的值 否則可能會出現明明是weekday_t但內容卻在enum內找不到的問題 語意上是有問題 enum必須保證內容都是有被定義過 因此compile的結果是合理 如果你真的一定要這麼做的話 用強制轉型compile會過而且結果會是你想要的5 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.97.125

12/23 01:25, , 1F
enum 的話,Mon | Feb 或 Mon + Feb 也是可以存進去,因為
12/23 01:25, 1F

12/23 01:26, , 2F
enum 值域的可以涵蓋它。
12/23 01:26, 2F
文章代碼(AID): #1BCFA7Iw (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
3
6
完整討論串 (本文為第 2 之 2 篇):
0
2
3
6
文章代碼(AID): #1BCFA7Iw (C_and_CPP)