宏观论点

时间:2012-06-06 16:06:52

标签: c

当输入为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?

3 个答案:

答案 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 ++从终端编译

相关问题