MST

星途 面试题库

面试题:C语言#define定义代码片段替换的中等应用

请用#define定义一个宏,实现计算两个整数中较大值的功能。并且说明在使用这个宏时可能会遇到什么问题。
30.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#define MAX(a, b) ((a) > (b) ? (a) : (b))

在使用这个宏时可能遇到以下问题:

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