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

#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/

10-12 14:58