当输入为2,3时程序会打印什么?
#include <stdio.h>
#define min(a,b) ((a) > (b) ? (b) : (a))
#define inc(a) a++
#define mult(a,b) (a * b)
int main(void) {
int x = 1, y = 2;
scanf("%d %d",&x,&y);
printf("min(%d,inc(%d))",x,y);
printf("=%d\n",min(x,inc(y)));
printf("min(mult(%d,%d+2),11)",x,y);
printf("=%d\n",min(mult(x,y+2),11));
return 0;
}
编辑:我对负数进行了有趣的回答,即-1
,-2
为什么inc(-2)
将y
更改为零而不是-1?
答案 0 :(得分:2)
将宏视为简单的字符串替换。只需将宏名称和括号替换为宏定义的主体,将宏参数替换为传入的内容。示例更容易:
#define hello(a) a+a
...
int y = hello(x);
将替换为:
int y = x+x;
要回答您的问题,请手动执行,非常非常仔细。对于嵌套宏,从内部宏开始。我提到过这么做吗?不要添加或删除任何括号集。
答案 1 :(得分:1)
输出结果为:
min(2,inc(3))=2
min(mult(2,4+2),11)=11
覆盖是什么意思? 如果你像上面那样定义一个函数并调用例如:
inc(x);
..然后编译器将其转换为x++
。变量a只是“参数”的名称,也将被实变量替换。
答案 2 :(得分:0)
您在运行什么操作系统?您可以自己轻松运行并查看结果
如果您在Windows上我建议获取CodeBlocks或Visual Studios
如果你在Linux或MAC上,学习使用gcc或g ++从终端编译