面试题答案
一键面试#define MAX(a, b) ((a) > (b) ? (a) : (b))
在使用这个宏时可能遇到以下问题:
- 运算符优先级问题:如果宏的参数包含复杂表达式,由于宏是简单的文本替换,可能会因为运算符优先级导致计算结果不符合预期。例如
MAX(a + 1, b * 2)
,实际展开可能为((a + 1) > (b * 2) ? (a + 1) : (b * 2))
,若调用者没考虑到优先级,会产生错误。 - 多次求值问题:如果参数有副作用(如自增、自减操作),在宏展开时可能会被多次求值,导致结果异常。例如
int x = 5; MAX(x++, 10)
,x
可能会被自增多次,结果与预期不符。