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