【发布时间】:2019-10-24 18:36:29
【问题描述】:
我有一个简单的宏来添加 2 个变量,但没有按预期工作。
#include <iostream>
using namespace std;
#define ADD(x,y) (x+y);
int main() {
int a = 10;
int b = 1;
int c = ADD(a,b)+1; //c=11 - NOT EXPECTED
int c = 1+ADD(a,b); //c=12 - EXPECTED
cout<< c;
}
在上面的代码中,当我在宏的开头添加 1 时,它给出了预期的输出。但如果我在最后加 1,它实际上并没有加 1。
为什么会有这种行为? 据我所知,当使用宏时,编译器只会在编译期间将宏替换为令牌字符串。如果是这样,在这两种情况下,输出应该是相同的。
第一种情况:c = (a+b)+1
第二种情况c = 1+(a+b)
【问题讨论】:
-
删除宏末尾的
;。同时删除宏。