宏输出说明



有人能解释一下这个程序的输出吗-

#include<stdio.h>
#include<conio.h> 
#define FUDGE(k) k+3.14159
#define PR(a) printf(#a" = %dt ",(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)是在第二个语句中打印的,而不是在第一个语句中。

#运算符很奇怪。它在展开参数之前工作。

因此,当调用PR(x*FUDGE(2))时,在扩展FUDGE之前,将#应用于x*FUDGE(2)
然而,在PRINT(x*FUDGE(2))中,FUDGE在传递给PR之前进行了扩展。当PR#应用于它时,它已经被扩展。

因为在第一个例子中,您使用PRINT,它在"调用"PR时扩展参数。

最新更新