MST

星途 面试题库

面试题:C++中#define宏定义替换机制的应用

在C++ 中,已知有如下代码:#define SQUARE(x) x * x ,如果有变量 int a = 5; int result = SQUARE(a + 1); ,请问result的值是多少?并解释#define宏定义在这段代码中的替换过程。
24.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. result的值
    • result的值为11。
  2. #define宏定义替换过程
    • 宏定义 #define SQUARE(x) x * x 是简单的文本替换。
    • 当遇到 int result = SQUARE(a + 1); 时,预处理器会将 SQUARE(a + 1) 按照宏定义进行替换,替换后的代码为 int result = a + 1 * a + 1;
    • 在C++ 中,乘法优先级高于加法,所以先计算 1 * aa 的值为5,那么 1 * a = 5
    • 接着计算 a + 5 + 1,即 5 + 5 + 1 = 11,所以 result 的值为11。
    • 这里体现了宏定义只是简单的文本替换,没有像函数调用那样的参数求值顺序和作用域等特性,可能会导致一些意想不到的结果,如这种优先级问题。如果要避免这种情况,可以将宏定义写成 #define SQUARE(x) ((x) * (x)),这样替换后为 int result = ((a + 1) * (a + 1));,结果就是正确的36。