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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在文件系统中找到可变参数宏实现相关的知识,希望对你有一定的参考价值。

我遇到此宏:__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-即使在使用sudo触发时-不知道为什么,但这就是另一个故事)。仍然没有告诉在哪里看(在什么文件中)。因此,如果它没有从根目录中找到该宏(并且递归地查看其他宏),那我应该在哪里看?

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

答案

可变参数宏是C11语言规范(读为n1570)和GNU cpp preprocessor的一部分。

它们是在cpp编译器内部实现的。请注意,该编译器非常复杂。阅读GCC,并浏览GCC编译器的source code,因为它是GCC internals。查看最近的GCC源代码的free software

当然,您然后要libcpp/ directory(不仅仅是可执行文件)。

然后,研究libcpp/(由几位印度学者撰写)以开始理解GCC。由于GCC拥有数以千万计的源代码行,因此这将需要您付出巨大的努力(至少几个月,甚至几年)。但是,试图了解GCC的组织是一项令人兴奋的冒险。您可能要对download the source code of GCC之一问focused问题。

几年前(在过时的GCC resource center项目中,我写了许多关于GCC内部的幻灯片)。详细信息已过时。但是大多数想法仍然有意义,我想有些数字仍然可以帮助您了解GCC。最近,我的GCC mailing lists提供了一些解释(与最新版本的GCC相关)。

您可能会喜欢玩(和编写自己的)GCC MELT

以上是关于如何在文件系统中找到可变参数宏实现的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何实现可变参函数

可变参数编程

可变参数列表

C语言怎么实现可变参数?

如何制作可变参数宏(可变数量的参数)

C语言宏定义实现可变参数