🚫 陷阱 1:有符號與無符號比較
int a = -1;
unsigned int b = 1;
if (a < b) // ❌ 假!a 轉為 unsigned 變 4294967295
// 正確
if ((long)a < (long)b) // 或 static_assert 檢查
🚫 陷阱 2:整數除法截斷後再轉浮點
double avg = sum / n; // ❌ 先整數除法截斷
// 正確
double avg = (double)sum / n;
🚫 陷阱 3:指針轉整數截斷 (64位系統)
long addr = (long)ptr; // ❌ 指針 64位,long 可能 32位
// 正確
uintptr_t addr = (uintptr_t)ptr; // 保證足夠寬
🚫 陷阱 4:浮點數轉整數的未定義行為
double huge = 1e20;
int x = (int)huge; // ❌ 超出 int 範圍,未定義行為
// 安全
if (huge > INT_MAX || huge < INT_MIN) handle_error();
int x = (int)huge;
🚫 陷阱 5:字面常數類型導致的意外轉換
long val = 2147483648; // ❌ 字面量無後綴為 int,溢出
// 正確
long val = 2147483648L; // L 後綴指定 long