#define ADD(x)(x)+(x)返回错误的结果

Ber*_*kin -1 c++

我有这个功能,它自己添加一个数字.

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

#define ADD(x)  (x)+(x)
int main()
{
    int x = 2;
    int y = ADD(++x);

    cout << y << endl;
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,它返回8但我期待6.

我认为x = 3并且它正在向ADD函数发送3,但它似乎没有.有人可以向我解释一下吗?

Chr*_*ckl 11

你的程序有不确定的行为,因为你正在调用preincrement运算符两次:int y = (++x)+(++x);.你没有收到编译器警告吗?

问题是这ADD 不是一个功能.这是一个宏观; 它执行文本替换.不要在C++中使用宏来做这些事情.

如果你将宏转换为一个函数,一切都会正常工作,因为++x只出现一次:

#include <iostream>

template <class T>
T add(T x)
{
    return x + x;
}

int main()
{
    int x = 2;
    int y = add(++x);

    std::cout << y << '\n';
}
Run Code Online (Sandbox Code Playgroud)