3

有人可以解释这个程序的输出 -

#include<stdio.h>
#include<conio.h> 

#define FUDGE(k) k+3.14159
#define PR(a) printf(#a" = %d\t ",(int)(a))
#define PRINT(a) PR(a);putchar('\n')

int main()
{
    int x=2;

    PRINT(x*FUDGE(2));
    printf(\n);
    PR(x*FUDGE(2));

    return 0;
}

输出 -

x*2+3.14159 = 7

x*FUDGE(2) = 7

为什么FUDGE(2)在第二个而不是在第一个语句中打印。

4

2 回答 2

6

#接线员很奇怪。它在扩展参数之前起作用。

因此,在调用时PR(x*FUDGE(2))#应用于x*FUDGE(2)之前FUDGE的扩展。
但是, in PRINT(x*FUDGE(2)),FUDGE在传递给 之前会被扩展PR。当PR应用于#它时,它已经被扩展了。

于 2013-08-27T06:39:24.870 回答
1

因为在第一次使用PRINTwhich 在“调用”时扩展参数PR

于 2013-08-27T06:39:12.573 回答