代码:
01
#include <iostream>
02
using
std::cout;
03
using
std::endl;
04
05
#define A(x) (x)*(x);
06
#define B(x) x*x;
07
void
main(){
08
int
a,b=
3;
09
a=A(b+
2);
10
std::cout<<a<<std::endl;
11
a=B(b+
2);
12
std::cout<<a<<std::endl;
13 }
02
03
04
05
06
07
08
09
10
11
12
13
A(X)和B(X),差别只在于后面 x有没有加括号。结果却不一样:
第一种情况带入后其实是:(b+2)*(b+2)=(5)*(5)=25;
第二种情况带入后其实是:b+2*b+2=3+2*3+2=11。
本文通过两个宏定义的例子展示了在C++中宏定义如何工作,特别是当宏被用于表达式的不同部分时,参数展开的不同方式可能导致意料之外的结果。文章对比了两种不同的宏定义,并解释了它们在实际应用中的差异。

2201

被折叠的 条评论
为什么被折叠?



