谁能解释一下这个程序的输出 -
#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)
在第二个而不是第一个语句中打印。
最佳答案
#
运算符很奇怪。它在扩展参数之前起作用。
因此,当调用 PR(x*FUDGE(2))
时,#
在 之前应用于
展开。x*FUDGE(2)
>FUDGE
然而,在 PRINT(x*FUDGE(2))
中,FUDGE
在传递给 PR
之前被展开。当 PR
对其应用 #
时,它已经展开了。
关于c++ - 宏输出说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18458514/