乘法宏给出错误答案

1 c++ macros c-preprocessor

#include <iostream>
using namespace std;

#define MULTIPLY(a, b) a*b

int main(){
    cout << MULTIPLY(2+3, 3+5);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我预计这会打印,40因为五乘以八等于四十。为什么会打印16

STF*_*ZBR 5

因为 C++ 宏不是函数。它们是文本副本,因此这意味着:

cout << 2+3*3+5;
Run Code Online (Sandbox Code Playgroud)

即 2 + (3*3) + 5