如何在文件系统中查找可变参数宏实现



我遇到过这个宏:__VA_ARGS__- 文档中的可变参数宏。它用于扩展宏定义中的三重点(如define SMF(...) fprintf(stdout, __VA_ARGS__),但是当我想找到它的实现时(它如何扩展给定的所有条件 - 只是它的实现( - 我试过sudo cd /; grep -r '#define __VA_ARGS__(#define提到,所以它不只是在"使用"中发出该宏,而是在它的定义中(。它搜索了很长时间,但它只给了我对某些目录的权限(例如sys/kernel/debug/block/loop17/hctx0/cpu3/read_rq_list- 即使与须藤一起尝试 - 也不知道为什么,但那是另一回事了(。仍然不知道在哪里看(在哪个文件中(。因此,如果它没有从根目录中找到该宏(并递归地查找其他宏(,那么我应该在哪里查找?

PS:我知道当宏以双下划线开头时,它要么是系统宏,要么是编译器 (gcc( 宏,但是当我对 gcc 做类似的事情时(grep__VA_ARGS__通过man gcc | grep ...(,即使没有成功。

可变参数宏是 C11 语言规范(阅读 n1570(和 GNUcpp预处理器的一部分。

它们在 GCC 编译器本身内部实现。请注意,编译器非常复杂。阅读有关GCC内部的信息,并浏览GCC编译器的源代码,因为它是自由软件。查看最近的 GCC 源代码的libcpp/目录。

当然,然后您要下载GCC的源代码(而不仅仅是可执行文件(。

然后,查看海湾合作委员会资源中心(由几位印度学者(开始了解海湾合作委员会。这将需要您付出重要的努力(至少几个月,甚至几年(,因为 GCC 有数千万行源代码。但试图了解海湾合作委员会的组织是一次令人兴奋的冒险。您可能想在其中一个 GCC 邮件列表中提出重点问题。

几年前,我写了很多关于GCC内部结构的幻灯片(在过时的GCC MELT项目中(。细节已经过时。但大多数想法仍然是相关的,我想一些数字仍然可以帮助你理解海湾合作委员会。最近,我的比斯蒙报告草案给出了一些解释(与最新版本的海湾合作委员会有关(。

您可能有兴趣使用(并编写自己的(GCC插件。

最新更新