查看扩展的 C 宏

2023-12-06

如果我想扩展 C 宏,有哪些好的方法可以做到这一点(除了手动跟踪之外)?

例如,GTK_WIDGET_SET_FLAGS,它使用一个宏,该宏使用一个宏,该宏使用一个(或两个)宏...

我只想看到它以某种方式自动扩展,而不是搜索每个宏、每一步。

UPDATE

我尝试了cpp,但似乎只做了第一遍

on:

GTK_WIDGET_SET_FLAGS(obj, 13)

我扩展了包含文件,然后:

G_STMT_START{ ((GTK_OBJECT_FLAGS (obj)) |= (13)); }G_STMT_END

这是通过这些错误消息解释的,我在 stderr 上收到此消息(使用 -o 文件名时)



gtk/gtkwidget.h:34:21: gdk/gdk.h: No such file or directory
gtk/gtkwidget.h:35:31: gtk/gtkaccelgroup.h: No such file or directory
gtk/gtkwidget.h:36:27: gtk/gtkobject.h: No such file or directory
gtk/gtkwidget.h:37:31: gtk/gtkadjustment.h: No such file or directory
gtk/gtkwidget.h:38:26: gtk/gtkstyle.h: No such file or directory
gtk/gtkwidget.h:39:29: gtk/gtksettings.h: No such file or directory
gtk/gtkwidget.h:40:21: atk/atk.h: No such file or directory
  

gtk、atk、gdk目录都在当前工作目录下,那么如何让cpp在其中搜索呢?

btw, gcc -E给出完全相同的输出cpp

Update2:

通过使用 gcc -E 并使用 -I 选项传递包含目录来解决包含路径问题


根据您使用的编译器,应该有一种方法可以在预处理器(宏扩展,编译器根本不知道宏)完成。

对于 gcc,选项是-E。这是一个简化的示例,使用玩具代码而不是实际的 GTK+ 宏:

~/tmp> cat cpptest.c
#define SET_FLAGS(w, f) ((w)->flags |= (f))

int main(void)
{
        SET_FLAGS(0, 4711);

        return 0;
}
~/tmp> gcc -E cpptest.c
# 1 "cpptest.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "cpptest.c"


int main(void)
{
 ((0)->flags |= (4711));

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

查看扩展的 C 宏 的相关文章

  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大

随机推荐

  • java.lang.ClassNotFoundException: org.springframework.faces.security.FaceletsAuthorizeTagHandler

    我尝试添加 Spring Security Facelets 标签库 因为它是这样写的here 我在web xml中添加
  • 将 PHP 网站与 Wordpress 用户身份验证集成

    我有一个现有的 Wordpress 网站 如果用户想要访问其他内容 完整故事 过去故事的存档等 则需要登录 我使用 PHP 和 MySQL 构建了一个新网站 该网站将托管在不同的服务器上 该网站的目标受众是访问前面提到的文章网站的同一受众
  • SKEmitterNode 粒子动作不工作 iOS9 Beta

    我正在 iOS9 Beta 4 中测试我的应用程序 发现许多曾经在 iOS8 中运行的代码不再按预期运行 另一个例子是 SpriteKit 的 SKEmitterNode articleAction 属性 以下代码在 iOS8 上有效 但在
  • Azure WebJobs NuGet 包错误

    我想知道是否有人在 Visual Studio 模板上的 Azure WebJobs 队列示例上遇到过运行错误 在我更新 NuGet 管理器上的所有包后 运行的示例会发出问题 这是错误消息 System InvalidOperationEx
  • 另一个字符串的子字符串会阻止父字符串被垃圾收集吗?

    String samplel ToBeGarbageCollected String sample2 samplel substring 0 1 samplel null 我知道子字符串内部会保留原始字符串的引用 但通过明确定义sample
  • 如何将更改从骨架子存储库拉入生产超级存储库

    我正在使用奥里莉亚骨架其中包含用于不同目的的各种项目设置 但这更多的是一个一般性问题 即如何使用 git 做一些事情 如下所述 我希望能够将 GitHub 框架存储库中发布的更新合并到我实际正在处理的项目中 你会怎么做 目前 我刚刚在 sc
  • 使用过滤器编辑 site_url

    使用 WordPress 调用site url 返回完整的站点 URL http www example com 我想做的是添加一些东西 add something here 在带有过滤器的 URL 末尾 我期待的结果是 http www
  • 仅将函数应用于具有可变位置的一列

    我有一堆不同的文件 所有文件都包含标题为 ID 的列 但不一定位于所有文件中的同一位置 我有一个函数想要应用于所有文件中的 ID 以将它们更改为 NEWID 我知道如果我传入 ID 的列号 我可以非常简单地做到这一点 假设它是 5 列文件中
  • 整数与长混淆

    我看到很多人相信以下观点 VBA 将所有整数值转换为 Long 类型 事实上 即使是MSDN 文章 says 然而 在最近的版本中 VBA 会将所有整数值转换为 Long 类型 即使它们被声明为 Integer 类型 这怎么可能 考虑这个简
  • 我如何知道方法调用可能引发哪些异常?

    有没有办法知道 在编码时 执行 python 代码时会出现哪些异常 我最终在 90 的情况下捕获了 Exception 基类 因为我不知道可能会抛出哪种异常类型 阅读文档并不总是有帮助 因为很多时候异常可以从深处传播 而且很多时候文档未更新
  • OpenCV v1/v2错误:该功能未实现

    我正在尝试让 OpenCV 在我的 Ubuntu 机器上使用 Python 我已经下载并安装了 OpenCV 但是当我尝试运行以下 python 代码时 应该从网络摄像头捕获图像并将其推送到屏幕 import cv cv NamedWind
  • 您可以将脚本分配给页面元素(形状等)吗?

    我想为学生制作一个交互式幻灯片 我想添加形状 因此当您单击形状时 它将运行 Apps Script 脚本 这在 Google 表格中是可能的 所以 我认为你也可以用幻灯片来做到这一点 没有办法运行容器绑定脚本通过点击 Google 幻灯片中
  • 使用新的亚马逊服务搜索亚马逊示例

    我找不到新的亚马逊服务的工作示例 或者至少在过去几年内 无论我在标题中输入什么内容 最接近的工作示例都会返回一个空项目 代码是 Amazon ProductAdvertisingAPI client AWSECommerceServiceP
  • 如何在 Three.js 中获取顶点的绝对位置?

    据我所知var point object geometry vertices i 将返回相对位置x y and z对象几何内部的点 如果对象被移动 旋转或缩放 如何获得绝对位置 您可以像这样获取顶点的世界位置 const vertex ne
  • 如何从互不关注的号码池中生成随机数

    我有一个数字池 例如 3 6 7 11 20 我需要每个数字在我的集合中出现 x 次 我的解决方案是创建一个包含两个整数 num numOfAppearnces 的类 我们称之为 元素 我在 arrayList 中创建了一个 元素 池 然后
  • 对 LAPACK 和 BLAS 子例程的未定义引用

    我试图了解 Fortran 中的 BLAS 和 LAPACK 如何工作等等 所以我编写了一个生成矩阵并将其反转的代码 这是代码 program test Implicit none external ZGETRF external ZGET
  • HRESULT 异常:0x80040111 (CLASS_E_CLASSNOTAVAILABLE)

    使用 Net 4 0 WPF 应用程序 C 我的应用程序中有以下代码 当Select单击按钮 OpenFileDialog fdgSelectFile bool dialogResult try fdgSelectFile new Open
  • Scala 通过 Spark 与纱线 - 缺少大括号字符串

    我编写了一些 scala 代码 看起来像这样 object myScalaApp def main args Array String Unit val strJson args apply 0 println strJson strJso
  • 如何使用 Java 的服务帐户访问 Google 表格?

    我正在尝试从服务帐户访问 Google 表格 服务帐户有权访问该表格 但我有一个问题 所有文档 包括官方文档点使用GoogleCredential自 1 7 起已弃用 弃用表示您应该使用库google auth library这就是我正在做
  • 查看扩展的 C 宏

    如果我想扩展 C 宏 有哪些好的方法可以做到这一点 除了手动跟踪之外 例如 GTK WIDGET SET FLAGS 它使用一个宏 该宏使用一个宏 该宏使用一个 或两个 宏 我只想看到它以某种方式自动扩展 而不是搜索每个宏 每一步 UPDA