宏输出说明

时间:2013-08-27 06:34:12

标签: c++ c macros

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

#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)会在第二个语句中打印而不是在第一个语句中打印。

2 个答案:

答案 0 :(得分:6)

#运算符很奇怪。它在扩展参数之前有效。

因此,在调用PR(x*FUDGE(2))时,#会在展开x*FUDGE(2)之前应用于FUDGE
但是,在PRINT(x*FUDGE(2))中,FUDGE会在将其传递给PR之前进行扩展。当PR对其应用#时,它已经展开。

答案 1 :(得分:1)

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