这段C代码是如何工作的?

2024-03-01

What is a##b & #a?

  #define f(a,b) a##b
  #define g(a)   #a
  #define h(a) g(a)

  main()
  {
          printf("%s\n",h(f(1,2)));  //how should I interpret this?? [line 1]
          printf("%s\n",g(f(1,2)));  //and this? [line 2]
  }

这个程序如何运作?


输出是

12
f(1, 2)

现在我明白了a##b & #a work. 但为什么两种情况(第 1 行和第 2 行)的结果不同呢?


## 将两个标记连接在一起。它只能在预处理器中使用。

f(1,2)变成1 ## 2变成12.

# 运算符本身字符串化代币:#a变成"a"。所以,g(f(1,2))变成"f(1,2)"当预处理器完成它时。

h(f(1,2))是有效地#(1 ## 2)这变成#12这变成"12"当预处理器运行它时。

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

这段C代码是如何工作的? 的相关文章

  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 如何将非静态类成员“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
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 我是否需要对使用 NewIntArray 创建的数组调用 ReleaseIntArrayElements?

    我有一个本机方法可以对位图进行一些工作 在该方法内部 我通过方法调用获取图像数据 该方法调用将数据写入jintArray我用它创建的参数NewIntArray jintArray pixels env gt NewIntArray widt
  • Grafana 条形宽度太小

    我想知道如何在直方图中获得更大的条形宽度 例如条形图 This is the graph how it looks rigth now And this is the corresponding query in flux 在 Grafan
  • Ninject.Web.PageBase 仍然导致对注入依赖项的空引用

    我有一个使用 Ninject 2 0 的 ASP NET 3 5 WebForms 应用程序 但是 尝试使用 Ninject Web 扩展来提供对 System Web UI Page 的注入 即使我切换到使用服务定位器来提供引用 使用 N
  • H2索引名称唯一性

    我对 h2 数据库中索引名称的唯一性有一个小问题 使用 mysql mariadb 可以同时为表 A 和表 B 定义名为 X 的索引 对于 h2 数据库这是不可能的 因为每个数据库的索引名称应该是唯一的 这对我来说是一个问题 因为我有一个基
  • 如何安排本地 Azure DevOps 构建每 5 分钟运行一次?

    不用管理由 我有一个案例 需要每 5 分钟运行一次构建 本地安装不支持 YAML 中的计划 那么 我们该怎么做呢 我可能可以使用 REST Api 但这很糟糕 因为我似乎要么创建一个一次性脚本 要么创建一个用于非常简单类型的计划的脚本 似乎
  • 丢包纠错码 (UDP)

    我不知道要寻找什么 因为我从 纠错代码 中得到的只是与您不知道错误位置的情况相关的内容 因此 这些代码比我需要的要复杂得多 而且效率低下 在下文中 请注意位等于数据包 因为只有整个数据包可能会丢失 因此位类比非常适合 是否有 ECC 考虑到
  • 授予某个数据库中所有存储过程的执行权限

    正如标题所示 我需要授予数据库中每个存储过程的执行权限 我们已经从测试转向生产 对生产数据库的控制减少了 并且所有导入的存储过程现在都获得了零权限 一件有趣的事情是 是否有任何方法可以确保所有导入的存储过程从一开始就获得执行权限 谢谢你的帮
  • 如何计算两个日期之间的天数?

    例如 输入框中给出两个日期
  • pip 安装 PIL 失败

    我正在尝试安装 pip 包 PIL 但是安装不起作用并抛出以下错误 Could not find a version that satisfies the requirement pil from xhtml2pdf 0 0 4 gt r
  • 我们可以在单独的模块中使用 Flask 错误处理程序吗

    我们正在将 Flask 应用程序从基于函数的视图迁移到可插入视图 除了错误处理程序之外 一切都按预期工作 我试图将所有错误处理程序放入一个名为 error handlers py 的模块中 并将其导入到主模块中 但它不起作用 尝试在 Goo
  • 如何同步两个 Oracle 数据库?

    我想创建一个项目 其中需要将本地数据库与远程数据库同步 本地数据库中所做的更改必须反映到远程数据库 这必须同步完成 我有一个应用程序 它对用 java jpa 编写的本地数据库执行 CRUD 操作 同步应该由 java 代码触发 我想到了数
  • 宽度等于动态高度平方[重复]

    这个问题在这里已经有答案了 当高度为父级 div 的 时 是否可以使用 css 或 js 将元素的宽度设置为与其高度相匹配 如果调整浏览器窗口的大小 子 div 也需要更改大小 Example body html height 100 pa
  • 元数据集合中已存在标识为“Id”的项目。参数名称:项目

    我的所有实体都有一个基类 public class Entity
  • 使用 Django 创建可编辑的 HTML 表格

    我正在尝试创建一个 Django 应用程序 用户可以在其中创建电影列表 每次用户登录时 他们的电影列表都会以表格形式呈现给他们 该表将包含三列 一列用于电影名称 一列用于类型 另一列包含删除按钮 允许用户删除与该按钮对应的行 用户可以通过在
  • Tensorflow 2.1.0 错误,模块“tensorflow”没有属性“GraphKeys”

    我今天刚刚安装了新的 tf 和 cuda 但是当我运行之前与 tf 1 4 一起使用的代码时 在新的 tensorflow 2 1 0 和 cuda 10 1 下将无法工作 如何解决这个问题 为了社区的利益 在答案部分提及解决方案 即使它出
  • 如何避免 getter 和 setter

    我在很多地方读到过 getter 和 setter 是邪恶的 我明白为什么会这样 但我不知道如何完全避免它们 Say Item 是一个包含有关商品名称 数量 价格等信息的类 ItemList 是一个类 它有一个项目列表 要查找总计 int
  • 提供隐藏内部函数的 C API 的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我编写了一个 C 库 其中包含一些 h 文件和 c 文件 我将其编译为 a 静态库 我想只向用户公开某些功能 并使其余功能尽可能 模糊 以使逆向
  • 由于关系,DataMapper 无法删除记录

    我使用 Torrent 和 Tag 设置了多对 DataMapper MySQL 如下所示 class Torrent include DataMapper Resource property id Serial property name
  • Sendgrid 返回 202 但不发送电子邮件

    我正在尝试让 sendgrid 的基本 hello world 正常工作 但到目前为止还没有成功 响应返回代码 202 表明它将发送电子邮件 但电子邮件从未发送出去 有谁知道发生了什么事吗 import sendgrid sg sendgr
  • 这段C代码是如何工作的?

    What is a b a define f a b a b define g a a define h a g a main printf s n h f 1 2 how should I interpret this line 1 pr