代碼中出現 case 'ABCD':,'ABCD' 是合法的多字符常量,類型為 int,值由四字符按內存佈局組合而成。
x86 為小端序:低地址存低位字節。
'ABCD' 在內存中按順序存放:A(0x41) B(0x42) C(0x43) D(0x44)(地址遞增)。
作為 int 讀取時,最低有效字節在最低地址,即:
地址: 低 --------------------> 高
字節: 0x41 0x42 0x43 0x44
│ │ │ │
▼ ▼ ▼ ▼
int值: D<<24 | C<<16 | B<<8 | A = 0x44434241
十進制:1145258561(或 1094861636 視編譯器對字符符號擴展處理)。
int flag = 'ABCD';
printf("%d\n", flag); // 1094861636 (GCC)
printf("%X\n", flag); // 41424344
char *p = (char*)&flag;
printf("%c%c%c%c\n", p[0], p[1], p[2], p[3]); // DCBA (小端讀出反序)
'ABC' (3 字符) → 佔低 3 字節,高字節補 0,合法。'ABCDE' (5 字符) → 編譯錯誤:超過 int 寬度(標準規定實現定義,通常報錯)。避免使用多字符常量:可移植性差(端序、int 寬度、字符符號擴展均為實現定義),可讀性差,易混淆。改用 enum、constexpr int 或字符串比較。