-2

What will the program print when the inputs are 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;
}

edit: I get funny answer for negative numbers i.e -1,-2.
Why is inc(-2) change y to zero instead of -1?

4

3 回答 3

2

将宏视为简单的字符串替换。只需将宏名称和括号替换为宏定义的主体,将宏参数替换为传入的内容。示例更简单:

#define hello(a) a+a
...
int y = hello(x);

将被替换为:

int y = x+x;

要回答您的问题,请手动执行此操作,并且非常非常小心。对于嵌套宏,从内部宏开始。我有没有仔细提到过这样做?不要添加或删除任何括号集。

于 2012-06-06T16:18:07.163 回答
1

输出将是:

min(2,inc(3))=2
min(mult(2,4+2),11)=11

覆盖是什么意思?如果您像上面那样定义一个函数并调用例如:

inc(x);

.. 然后编译器把它变成x++. 变量 a 只是“参数”的名称,也将被实际变量替换。

于 2012-06-06T16:13:16.853 回答
0

你运行的是什么操作系统?您可以轻松地自己运行它并查看结果

如果您在 Windows 上,我建议您获取 CodeBlocks 或 Visual Studios

如果您在 Linux 或 MAC 上,请学习使用 gcc 或 g++ 从终端编译

于 2012-06-06T16:16:07.507 回答