#define PT 5.5
#define S(x) PT*x*x
int main() {
int a=1, b=2;
printf("%4.1f\n", S(a+b)); // 輸出 9.5
}
S(a+b) → PT * a+b * a+b → 5.5 * 1+2 * 1+2 → 運算順序:乘法優先 → 5.5 + 2 + 2 = 9.5。
面積公式 PT * (a+b) * (a+b) = 5.5 * 3 * 3 = 49.5。
#define S(x) (PT * (x) * (x))
// 或更安全:參數與表達式均加括號
#define S(x) ((PT) * (x) * (x))
(x) 防止傳入表達式優先級錯亂。( ... ) 防止宏展開後與外部運算符優先級衝突。(PT) 防止常量為表達式時出錯。// 修正後
printf("%4.1f\n", S(a+b)); // 輸出 49.5