X 宏破坏 doxygen 调用图

2023-12-23

我有3个文件:

test.c

int table[] = {
    #define X(val)    val,
    #include "test.x"
    #undef X
};
void level2(void) {
    level3();
    level4();
}
void level3(void) {
    level4();
}

test2.c

void level1(void) {
    level2();
    level3();
    level4();
}
void level4(void) {
}

test.x

X(1)
X(2)
X(3)

我使用 doxygen 为这些函数创建调用图。这是我的预期:

  • level1:
    • 参考 level2()、level3() 和 level 4()。
  • level2:
    • 参考文献级别 3() 和级别 4()。
    • 由 level1() 引用。
  • level3:
    • 参考文献级别4()。
    • 由 level1() 和 level2() 引用。
  • level4:
    • 由 level1()、level2() 和 level3() 引用。

但这是我得到的:

  • level1:
    • 参考 level2()、level3() 和 level 4()。
  • level2:
    • 由 level1() 引用。
  • level3:
    • 由 level1() 引用。
  • level4:
    • 由 level1() 引用。

看来 test.c 上的 X-macro 是罪魁祸首。我设法让它发挥作用 2 件事(两者都可以):

  1. 重命名test.x所以 doxygen 找不到它。它会显示警告,但是 调用图是正确的。
  2. 在末尾添加尾随换行符test.x。通常文件会结束 之后立马X(3).

问题:

如何在不编辑文件的情况下从 doxygen 中获得可靠的 callgraph? 是否有我需要更改的设置或者这是一个简单的错误?


我对 xmacros 有不同的经验。一般来说,Doxygen 会将宏视为正确的声明,而不是实际预处理它们。为了让宏工作(这包括 x 宏)。一般来说:

  1. Set MACRO_EXPANSION=yes
  2. 任意设定EXPAND_ONLY_PREDEF=yes(这将使 Doxygen 扩展all宏)或
  3. 将宏的名称添加到EXPAND_AS_DEFINED.

另外,请注意这一点:http://www.doxygen.nl/manual/config.html#cfg_skip_function_macros http://www.doxygen.nl/manual/config.html#cfg_skip_function_macros

为了让您了解 xmacros 和 Doxygen 的功能,我可以从中生成正确的文档:https://github.com/couchbase/libcouchbase/blob/master/include/libcouchbase/error.h#L95 https://github.com/couchbase/libcouchbase/blob/master/include/libcouchbase/error.h#L95

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

X 宏破坏 doxygen 调用图 的相关文章

  • 为什么使用abs()或fabs()而不是条件否定?

    在 C C 中 为什么要使用abs or fabs 不使用以下代码即可查找变量的绝对值 int absoluteValue value lt 0 value value 这与较低级别的指令较少有关吗 您提出的 有条件的abs 并不等于std
  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 如何在 VS 中键入时显示方法的完整文档?

    标题非常具有描述性 是否有任何扩展可以让我看到我正在输入的方法的完整文档 我想查看文档 因为我可以在对象浏览器中看到它 其中包含参数的描述和所有内容 而不仅仅是一些 摘要 当然可以选择查看所有覆盖 它可能是智能感知的一部分 或者我不知道它并
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 单元测试失败,异常代码为 c0000005

    我正在尝试使用本机单元测试项目在 Visual Studios 2012 中创建单元测试 这是我的测试 TEST METHOD CalculationsRoundTests int result Calculations Round 1 0
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 在基类集合上调用派生方法

    我有一个名为 A 的抽象类 以及实现 A 的其他类 B C D E 我的派生类持有不同类型的值 我还有一个 A 对象的列表 abstract class A class B class A public int val get privat
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • PHP/MYSQLI:PHP 中 mysqli_query 失败

    首先 我是 mysql i 语言的菜鸟 只知道 PHP 的基础知识 注意 我不管理或拥有 无权访问当前托管网页的服务器 但是我可以访问 phpMyAdmin 页面 也就是说 我有一个网页 我正在上面尝试一些东西 现在我正在尝试创建一个链接到
  • 更改 ggplot2 中条带文本背景的高度无法按预期工作

    Load libraries library ggplot2 library gtable Build plot d lt ggplot mtcars aes x gear geom bar aes y gear stat identity
  • 如何在测试查找期间将 MavenProject 注入到 mojo 中?

    这是我的测试 maven plugin testing harness 3 3 0 junit 5 6 2 import java io File import org apache maven plugin testing Abstrac
  • 禁止删除 git 中的 master 分支

    我正在尝试设置一个 git hook 来禁止任何人删除master alpha and beta我们存储库的分支 有人能帮忙吗 我从来没有做过 git hook 所以我不想在没有一点帮助的情况下尝试自己开发自己的 git hook 直接用一
  • CloudFormation——可以有嵌套映射吗?

    是否可以在 CloudFormation 中嵌套映射 如下例所示 Mappings Regions us east 1 Environments dev ImageId something Subnet something qa
  • 如何进行 F# 测量以获得加速

    假设单机有8核 在 Haskell 中 您可以使用以下命令进行编译threaded选项 然后在运行时使用 RTS Nx指定要使用的核心数量 例如 myprg args sequential run myprg args RTS N1 par
  • proguard.cfg 文件丢失

    阅读 proguard 上的文档 安卓文档 http developer android com tools help proguard html 我应该有一个 ProGuard cfg 正如它所说 当你创建Android项目时 会在项目根
  • 使用 boto 从 dynamodb 获取唯一哈希键值列表

    我想获取 dynamodb 表的唯一哈希键值列表 我目前知道的唯一方法是扫描整个表 然后迭代扫描 更好的方法是什么 rs list table scan range eq rangevalue for i in rs print i pri
  • 自定义域验证是否在 Azure 订阅之间共享?

    我注意到 在我的 Azure 订阅中的许多应用程序服务 应用程序服务计划和 Azure 区域中 自定义域验证 ID 的值似乎是相同的 我看不到任何关于是否证实这一观察结果的文件 自定义域验证是否在 Azure 订阅之间共享 I m refe
  • 编码 URL 后出现 HTTP 404 错误

    当我使用 HttpUtility UrlEncode 对 Url 进行编码时 我最终收到服务器错误 ASP NET 代码 NavigateUrl 网址 http localhost UITest MM UpdateMember aspx 3
  • 按组计算唯一值

    DATA data frame TRIMESTER c 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 STUDENT c 1 2 3 4 5 6 7 1 2 3 5 9 10 11 3 7 10
  • Mean.io 框架与 socket.io

    如何在 Mean io 堆栈中使用 socket io 首先 Mean io 非常定期地更改其文件夹结构 所以我的问题是配置 socket io 的最佳位置在哪里 还是使用express io更好 其次 我仍然不太确定在哪里寻找告诉mean
  • 如何在 Clojure 中迭代向量的向量?

    我有一条包含 3 个属性的消息 类型 货币和金额 我有一个具有 4 个属性的规则 目的地 消息类型 货币和金额 我想检查我的规则并在消息类型上找到与消息匹配的消息并返回目的地 如果没有匹配则返回 null 我使用向量作为消息和规则中字段的固
  • Django 中的 Apscheduler Job 执行两次

    计划的作业执行两次 差异以纳秒为单位 我有一个任务如下task py def print hello print time gt datetime datetime now print hello def print world print
  • 指定制表符宽度?

    显示空白时是否可以定义制表符宽度 例如在 标记或其他内容内 我找不到任何可以用 CSS 做到这一点的东西 但这似乎是一件很常见的事情 就我而言 选项卡宽度太宽 导致页面上的一些代码片段太宽 如果我能以某种方式缩短选项卡宽度以使其适合没有滚动
  • 在 PHP 中将二进制字节数组转换为图像

    我有一个 Java 网络服务 它返回所请求的文件内容byte 字节数组 形式 有时这些文件是 HTML 文件 有时是图像 文件类型没有限制 我正在寻找一种方法将此数组转换为有效的图像 字符串 我的working for text文件如下 b
  • Google OAuth 令牌验证如何以及为何执行?

    当 Google OAuth 文档指示我在访问令牌 刷新令牌 范围 受众和客户端 ID 之间进行操作时 我感到很困惑验证所有令牌 https developers google com accounts docs OAuth2UserAge
  • Net::SSH::Perl 使用转发的 SSH 密钥

    我正在尝试使用 Net SSH Perl 编写 perl 脚本 目前它非常简单 因为我只想通过 ssh 在目录中执行 ls usr bin perl use Net SSH Perl KEYFILE user ssh id rsa ssh
  • number_format() 导致错误“遇到格式不正确的数值”

    我正在使用 number format 将浮点数四舍五入为仅 2 位小数 问题是我的一些输入一开始的小数位数不超过 2 位 所以代码 number format value 2 如果没有足够的十进制数字 它不会平静地添加 0 而是会在 Ap
  • X 宏破坏 doxygen 调用图

    我有3个文件 test c int table define X val val include test x undef X void level2 void level3 level4 void level3 void level4 t