希望能够得到解答,谢谢,问了CHatGPT,他给的结果也是600
#include <stdio.h>
#define A 200
#define B A+100
int main(void)
{
int a = B * 2;
printf("%d\n", B);
printf("%d\n", a);
printf("%d\n", B*2);
return 0;
}
在VS2022 win10环境下运行下面代码,十分不理解,为什么a的结果是400,B*2的结果是400,而B的结果是200,这是一到C++逆向的面试题
单独输出B是300,符合定义的预期。
但是放在表达式中,相当于 A+100*2,运算符优先级的原因,结果是200+200=400。define里面加上括号就行#define B (A+100),使用要注意
你只要记住,宏定义一定要展开后 再计算,不要预先去计算它
B * 2
= A + 100 * 2
= 200 + 200
= 400
宏定义是代码替换,
只是将代码中出现B的替换成A+100