宏观评估顺序[重复]

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(使用前将#替换为@)

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

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 使用 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