++a vs 後綴 a++ 核心差異:值、副作用、序列點兩者都會將 a 加 1,但「表達式的值」不同:
++a(前綴)→ 先遞增,**表達式值為遞增後的新值**。a++(後綴)→ 先取值,**表達式值為遞增前的舊值**,然後再遞增。int a = 5, b;
b = ++a; // a=6, b=6 (先加後用)
int x = 5, y;
y = x++; // x=6, y=5 (先用後加)
a++; // 效果等同 ++a; 只是單純遞增,表達式值被丟棄
++a;
a++ 修改 a)。;、|| && ?: , 運算子、函數呼叫前後),所有先前副作用必須完成,且無副作用重疊。a = a++ + ++a;、printf("%d %d", i++, ++i);、a[i] = i++; —— **嚴禁寫法**。a++,需要新值用 ++a,語意明確。func(i++, ++i) 參數遞增順序不可預期 → 分成兩句。++i(意圖明確、避免臨時變數,雖然現代編譯器優化後無差異)。i++,如 arr[i++] = val;。-Wall -Wextra -Wsequence-point(GCC/Clang)可偵測部分 UB。