| # | 錯誤程式碼 | 誤以為結果 | 實際結果 | 原因 |
|---|---|---|---|---|
| 1 | *p.f | (*p).f | *(p.f) | . 優先級 > * |
| 2 | int *ap[] | int (*ap)[] | int *(ap[]) | [] > * |
| 3 | int *fp() | int (*fp)() | int *(fp()) | () > * |
| 4 | val & mask != 0 | (val & mask) != 0 | val & (mask != 0) | != > & |
| 5 | c = getchar() != EOF | (c = getchar()) != EOF | c = (getchar() != EOF) | != > = |
| 6 | msb << 4 + lsb | (msb << 4) + lsb | msb << (4 + lsb) | + > << |
| 7 | i = 1, 2 | i = (1, 2) | (i = 1), 2 | , 最低優先級 |
= += -= *= /= %= &= ^= |= <<= >>=)、條件運算子 ?:、一元運算子、型別轉換int a, b = 1, c = 2; a = b = c; // 等價 a = (b = c) → a=2, b=2
int x = 8 / 4 / 2; // (8/4)/2 = 1,非 8/(4/2)=4
C 標準不保證下列情況的運算順序:
func(a(), b()) 不保證 a() 先於 b()i = i++ + i++ 行為未定義printf("%d %d", i++, i++) 輸出順序不確定-Wall -Wextra、cppcheck、clang-tidy)