宏输出说明

nik*_*ola 3 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;
}
Run Code Online (Sandbox Code Playgroud)

输出 -

x*2+3.14159 = 7

x*FUDGE(2) = 7
Run Code Online (Sandbox Code Playgroud)

为什么FUDGE(2)要在第二个声明中打印而不是在第一个声明中打印.

ugo*_*ren 6

#操作是陌生的.它在扩展参数之前有效.

所以在调用时PR(x*FUDGE(2)), #应用于x*FUDGE(2)之前FUDGE是扩展的.
然而,在PRINT(x*FUDGE(2)),FUDGE是在传递之前扩大PR.当PR适用#于它,它已经被扩大.