MST

星途 面试题库

面试题:C++宏定义的参数替换陷阱

在C++中,定义一个带参数的宏`#define SQUARE(x) x * x`。当使用`SQUARE(3 + 2)`时,结果是什么?请解释原因,并说明如何修改宏定义以避免这种问题。
16.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 结果: 当使用SQUARE(3 + 2)时,结果为11。 原因是宏替换是简单的文本替换,SQUARE(3 + 2)会被替换为3 + 2 * 3 + 2,根据运算符优先级,先计算乘法,2 * 36,然后再依次计算加法,3 + 6 + 2 = 11
  2. 修改宏定义以避免问题: 可以将宏定义修改为#define SQUARE(x) ((x) * (x))。这样,SQUARE(3 + 2)会被替换为((3 + 2) * (3 + 2)),先计算括号内的加法,3 + 25,再计算乘法,5 * 5 = 25,得到正确的平方结果。