有人可以解释这个程序的输出 -
#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)
会在第二个语句中打印而不是在第一个语句中打印。
答案 0 :(得分:6)
#
运算符很奇怪。它在扩展参数之前有效。
因此,在调用PR(x*FUDGE(2))
时,#
会在展开x*FUDGE(2)
之前应用于FUDGE
。
但是,在PRINT(x*FUDGE(2))
中,FUDGE
会在将其传递给PR
之前进行扩展。当PR
对其应用#
时,它已经展开。
答案 1 :(得分:1)
因为在第一次使用时PRINT
会在“调用”PR
时扩展参数。