宏中的 # 和 ##

2023-12-01

  #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;
  }

只需查看该程序,人们“可能”就会期望两个 printf 语句的输出相同。但在运行该程序时,您会得到它:

bash$ ./a.out
12
f(1,2)
bash$

为什么会这样呢?


类似函数的宏中出现的参数,除非它是以下操作数# or ##,在替换它并重新扫描整体以进一步扩展之前进行扩展。因为g的参数is的操作数#,参数不会扩展,而是立即字符串化("f(1,2)")。因为h的参数is not的操作数# nor ##,参数首先被扩展(12),然后代入(g(12)),然后重新扫描并进一步扩展("12").

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

宏中的 # 和 ## 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 C# 读取 Soap 消息

  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • 检查连续元素之间的差异是否相同

    我是在 Prolog 中使用算术的新手 我做过一些小程序 但主要涉及逻辑 我正在尝试实现一个将返回的函数true or false每个连续元素对之间的差异是否相同 我的输入如下所示 sameSeqDiffs 3 5 7 9 2 我觉得我需要
  • Gradle 替代 mvn install

    我在 mvn 上构建了 2 个不同的项目 我正在尝试更换为 Gradle 项目 1 是一个 SDK 项目 2 使用该 sdk 示例 在 maven 的时候 它使用 mvn install 创建工件 将整个项目添加到本地存储库中 我喜欢这样在
  • 如何将 linq 结果转换为 HashSet 或 HashedSet

    我有一个 ISet 类的属性 我正在尝试将 linq 查询的结果获取到该属性中 但不知道如何执行此操作 基本上 寻找最后一部分 ISet
  • 执行程序时,代码块打开 2 个控制台窗口

    我最近安装了 Code Blocks 并使用它进行 C 编程 我编写了一个基本的 Hello World 程序 当我运行该程序时 会打开 2 个控制台窗口而不是 1 个 如果只有输出 则第一个控制台在显示输出后关闭 然后第二个窗口保持打开状
  • 如果数据库发生变化,自动刷新内容

    当 mysql 数据库表更改时 如何自动将数据库行 PHP 的值添加到页面 而不刷新页面本身 所以 它有点像这样 自动刷新浏览器以响应文件系统更改 but当数据库发生变化时 不要刷新浏览器来更改文件系统 而是更新内容 而不刷新任何内容 谢谢
  • 使用Session存储Datatable

    目前 我们使用会话在页面中存储数据表 这样我们就不必一次又一次地访问数据库来获取相同的数据表 但我担心它会占用服务器内存 如果有一天大量用户登录 服务器的响应会变慢 我们的应用程序也可能崩溃 请告诉我将数据表存储到会话中是个好主意还是我们应
  • flex / bison:如何在同一输入文件上切换两个词法分析器

    我如何移交打开的文件 例如由另一个扫描仪读取到下一个扫描仪 并将其交给解析器 Flex 缓冲区无法轻松地从一台扫描仪传输到另一台扫描仪 许多细节对于扫描仪来说是私有的 需要进行逆向工程 从而导致可维护性的丧失 然而 只要语义类型兼容 将两个
  • 在辅助监视器上运行单独的应用程序

    Android 支持将应用程序渲染到辅助屏幕 4 2 中添加 但是否可以在主显示器上运行一个应用程序 在辅助显示器上运行另一个应用程序 Android SDK 附带一个Presentation允许前台活动在外部显示器上显示替代内容的类 这是
  • 远程:致命:内存不足,使用 post-receive 挂钩在 git Push 上重新分配失败

    当我做git push remotename branchname到我与 1and1 共 享主机上的远程时 我收到以下错误消息 Counting objects 7 done Delta compression using up to 8
  • 当混合中有新行字符时,UITextView firstRectForRange 不起作用

    我使用此方法将 NSRange 转换为 CGRect 因为它与 UITextView 相关 CGRect frameOfTextRange NSRange range inTextView UITextView textView UITex
  • Spring Data Neo4J 存储库 findAll() 导致 nullpointerException

    我制作了一个简单的存储库 其中包含系统中的所有人员 一切似乎都工作正常 我可以根据给定的键和值添加 删除甚至检索单个人员 但由于某种原因我无法直接检索存储在存储库中的所有人员 我尝试使用 findAll 方法来完成此操作 该方法应该返回一个
  • IIS不使用用户环境变量

    我将 NET Core 应用程序部署到同一服务器两次 一次用于 QA 一次用于生产 目前 我让他们每个人都使用不同的本地用户来运行 IIS 应用程序池 并相应地将 ASPNETCORE ENVIRONMENT 变量设置为 qa 和 生产 这
  • java.lang.OutOfMemoryError:调用 Files.readAllBytes 时直接缓冲内存

    我有以下代码 旨在读取目录并将其压缩到 tar gz 存档中 当我将代码部署到服务器上并使用一批文件对其进行测试时 它在前几个测试批次中工作 但在第 4 或第 5 批次之后 它开始持续给出 java lang OutOfMemoryErro
  • 从数组中删除负数

    我有一个来自数据库的数组 它从一组元素中获取所有 id 然而 它似乎也从发生的一些后端事件中获取了一些负 ID 并且它破坏了我需要对这些 id 执行的操作 在循环数组并将其放入应用程序之前 有没有办法从数组中删除这些负 ID 在我抓住它们之
  • 使用 AVFoundation 框架 iPhone 进行视频录制?

    我正在借助示例代码开发一个应用程序2010 年全球开发者大会AVCamDemo 示例 在应用程序中 我需要从 iPhone 的前置摄像头录制视频 但由于我的地方没有新的 iPhone 4 我无法正确测试代码 如果有人能给我提示 无论我是否朝
  • 我在 pyqt5 程序中使用 QDoubleValidator 但它似乎不起作用

    我创建了一个 QWidget 对象 其中有一些 lineEdit 并且我打算向它们添加一些约束 因此我实现了 QDoubleValidator 对象 以下是我的代码中的相关部分 self lineEdit taxRate QLineEdit
  • Python 和 Selenium - 离开页面时禁用警报

    Using Python 3 and Chrome驱动程序 假设一个自动化的 Python 程序正在网上冲浪 从不同的来源获取内容 假设这些网站中的任何一个触发了 您确定要离开此页面吗 alert 关键词 any 以随机方式 这些网站 Qu
  • 结构化数据(微观数据)和嵌入项目

    我想使用 Microdata 和 Schema org 来定义我的网页的主要内容 所以我做了这样的事情 div div div div
  • 将字符串从 C# 编组到 C++

    我是微软世界的新人 我在尝试将简单的字符串从 c 传递到 dll c 时遇到很多问题 我读过很多帖子和文档 但问题是一样的 C code extern C declspec dllexport int Init long l char ur
  • 宏中的 # 和 ##

    include