宏观评估顺序[重复]

2024-04-14

可能的重复:
宏中的 # 和 ## https://stackoverflow.com/questions/4364971/and-in-macros

为什么第二个 printf 的输出是 f(1,2) 宏的计算顺序是什么?

#include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)

int main()
{
  printf("%s\n",h(f(1,2)));
  printf("%s\n",g(f(1,2)));
  return 0;
}

output 12 
       f(1,2)

From http://gcc.gnu.org/onlinedocs/cpp/Argument-Prescan.html#Argument-Prescan http://gcc.gnu.org/onlinedocs/cpp/Argument-Prescan.html#Argument-Prescan

宏参数在替换到宏体中之前会被完全宏扩展,除非它们被字符串化或与其他标记一起粘贴。替换后,将再次扫描整个宏体(包括替换的参数)以查找要扩展的宏。结果是参数被扫描两次以扩展其中的宏调用。

Meaning:

  • f 连接其参数,因此其参数不会扩展
  • h 不会字符串化或连接其参数,因此其参数被扩展。
  • g 对其参数进行字符串化,因此其参数不会扩展

h(f(1,2)) -> g(12) -> "12"

g(f(1,2)) -> "f(1,2)"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

宏观评估顺序[重复] 的相关文章

随机推荐

  • 使用 Javascript 更改背景图像

    我一直在尝试在我创建的网页之一上创建幻灯片 我创建了一个具有唯一类名的 div 其目标是使用 JavaScript 更改背景图像 到目前为止 我已经能够执行以下操作 使用 querySelector 捕获我想要更改背景图像的 div 尝试使
  • Boost 记录器附加到文件

    我已经初始化了记录到文件的接收器 logging add file log keywords file name sample N log lt file name pattern gt keywords rotation size 10
  • 使模板参数成为朋友?

    Example template
  • Android Studio 支持库 v7

    我正在尝试使用支持操作栏 我已遵循有关如何在 Android Studio v 0 3 0 中包含支持库的所有说明 我的 build gradle 的依赖项如下所示 dependencies compile fileTree dir lib
  • php exec() 返回空值

    目前我的目标是使用查看 PHP exec 的输出 但得到一个空值 我正在使用 firephp firebug 扩展 日志记录 但无法弄清楚为什么它是空的 完整代码在这里 https github com MattMcFarland ninj
  • Stream.findAny是短路操作吗?

    考虑这段代码 Object found collection stream filter s gt myPredicate1 s filter s gt myPredicate2 s findAny 它会处理整个流并调用两者吗myPredi
  • 字符串中的街道地址搜索 - Python 或 Ruby

    嘿 我想知道如何在 Python Ruby 中的字符串中找到街道地址 也许通过正则表达式 另外 它将采用以下格式 美国 420 Fanboy Lane 库比蒂诺 CA Thanks 也许你想看看pypostal https github c
  • 找到内接于较大多边形的最大面积多边形

    我想找到一个多边形的旋转和位置 以最大化它可以在更大的多边形内拟合的约束下放大的大小 目前的想法是使用scipy 优化例程 http docs scipy org doc scipy reference optimize html用于优化位
  • React.js 中组件键的重要性

    我只是想知道在阅读文章时https coderwall com p jdybeq the importance of component keys in react js https coderwall com p jdybeq the i
  • 如何使用jQuery更新数据库而不刷新页面?

    我该如何发送这个display false 使用 jQuery 向服务器发送函数 以便在不刷新页面的情况下更新数据库 def display false if display false main id self request get m
  • 无法在 Mavericks/Yosemite 中签署 kext?

    目标 签署我自己的软件包和我自己的内核扩展 上下文中的 我自己的 意味着 我编写的 或者我在其他地方选择的 从它们的源代码中重新编译的 并且想要安装在我的机器上 问题 小牛队不接受我的签名Code Signing Failure code
  • Google 电子表格作为网络应用程序的数据库

    有谁知道我是否可以使用 Google 电子表格来存储自定义 HTML 表单的结果 我知道 Google 电子表格允许在 Google 域本身上创建表单 但是是否可以使用 Google 电子表格作为其他网络应用程序的数据库 谷歌电子表格 AP
  • 左移 255 位(作为一个字节)

    谁能解释为什么以下内容无法编译 byte b 255 lt lt 1 错误 常量值 510 无法转换为 字节 我期待二进制的以下内容 1111 1110 类型转换难倒了我 C 中的数字文字是int not byte 编译器将评估位移位 因此
  • 无法解决 SonarQube 错误“使该行从第 3 列开始”

    我在 xml 中有很多行都存在此错误 布局 字符串 可绘制对象 我尝试将每列的空间更改为 3 在出现此错误的行中放置 3 个选项卡 但在 SonarQube 中仍然出现此错误 我该如何解决这个问题 我在这里举了一个我收到此错误的示例
  • 令人困惑的类型错误

    我有一个小型 Python 程序 它应该通过运行适当的方法来对按下向上按钮做出反应 但它没有这样做 而是给了我一个令人困惑的错误 from tkinter import class App def init self master self
  • 检查 Objective-C 中的日期格式

    我收到一个包含日期的字符串 我想检查它是否具有 dd MM yyyy 格式 现在我正在使用在同一页面中找到的代码 NSDate date dateFormatter dateFromString dateString if date nil
  • 为什么 JavaScript 函数调用要用括号括起来? [复制]

    这个问题在这里已经有答案了 这两个 javascript 函数调用有什么区别 function alert foo 与此相比 function alert foo 这样做是为了可读性 您给出的两个示例之间没有真正的功能差异 但它们都非常接近
  • 在react-native中,任务因请求而被孤立——这是什么意思?

    我正在尝试为带有按钮和其他操作的图块构建一个网格系统 我分叉尝试使用 React Native Playground 网格图像源 你可以找到here https rnplay org apps sXriww 添加时会产生以下 堆栈跟踪 和错
  • 在 VARCHAR 字段中使用 MAX()

    我有一个包含以下数据集的表 ID VARCHAR2 field D001 D002 D010 D0012 I use max 在这个领域里 Select max ID from
  • 宏观评估顺序[重复]

    这个问题在这里已经有答案了 可能的重复 宏中的 和 https stackoverflow com questions 4364971 and in macros 为什么第二个 printf 的输出是 f 1 2 宏的计算顺序是什么 inc