c++ - 宏输出说明

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

最佳答案

# 运算符很奇怪。它在扩展参数之前起作用。

因此,当调用 PR(x*FUDGE(2)) 时,# 之前应用于 x*FUDGE(2) >FUDGE 展开。
然而,在 PRINT(x*FUDGE(2)) 中,FUDGE 在传递给 PR 之前被展开。当 PR 对其应用 # 时,它已经展开了。

关于c++ - 宏输出说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18458514/

相关文章:

c++ - 使用模板进行宏扩展

c++ - 从 Rcpp 函数接收结果后 session 崩溃

c++ - 在 C++ 中初始化派生类参数

c - snprintf 函数未声明?

c - 使用位运算符将十进制转换为二进制

c - C 中的宏无法理解

c++ - #define 指令有多个替换?

c++ - 仅通过命令行在 Windows 上运行 CMake 生成的 INSTALL.vcxproj?

javascript - 需要了解幕后 | Node .js

c - 客户端断开连接后首次调用 'send' 时未收到 sigpipe