我遇到过这个宏:__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插件。