Re: [問題] 關於列舉
※ 引述《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
12/23 01:25, 1F
→
12/23 01:26, , 2F
12/23 01:26, 2F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
10
15