如何从位于/usr/include中的Linux头文件中获取函数名
我们在如何从位于/usr/include中的Linux头文件中获取函数名,c,linux,header,gnu,C,Linux,Header,Gnu,我们在/usr/include 我正在寻找一种方法来打开和读取包含文件,并对其进行解析,以打印位于其中的所有声明函数。 任何人都可以解释或提供有关此标题格式的链接。 我这样做是因为我正在尝试做一个C自动完成插件,如果我包含一个文件。h该插件将为我提供所有函数都位于该文件中。h。如果您需要特定的标准库模块,请用谷歌搜索它们。例如: 这是谷歌搜索“string.h”的第一个结果。它详细介绍了cstring中提供的所有功能 如果您想跟踪/usr/include的所有子目录中的所有头中的所有函数,我可
/usr/include
我正在寻找一种方法来打开和读取包含文件,并对其进行解析,以打印位于其中的所有声明函数。
任何人都可以解释或提供有关此标题格式的链接。
我这样做是因为我正在尝试做一个C自动完成插件,如果我包含一个文件。h该插件将为我提供所有函数都位于该文件中。h。如果您需要特定的标准库模块,请用谷歌搜索它们。例如: 这是谷歌搜索“string.h”的第一个结果。它详细介绍了cstring中提供的所有功能 如果您想跟踪/usr/include的所有子目录中的所有头中的所有函数,我可以为您提供一个简短的bash脚本,但我并不真正理解这一点 干杯
编辑:或者像扎克在上面评论的那样,有一个问题。好链接,扎克 如果您想要特定的标准库模块,请用谷歌搜索它们。例如: 这是谷歌搜索“string.h”的第一个结果。它详细介绍了cstring中提供的所有功能 如果您想跟踪/usr/include的所有子目录中的所有头中的所有函数,我可以为您提供一个简短的bash脚本,但我并不真正理解这一点 干杯
编辑:或者像扎克在上面评论的那样,有一个问题。好链接,扎克 手册页的部分
0p
包含POSIX头的手册页,以及每个手册页中定义的内容(或者说应该定义的内容)。手册页的部分0p
包含POSIX头的手册页,以及定义的内容(或者说应该定义的内容)每个人都有这样的定义。每个人在职业生涯中都会至少要求一次这样的工具;扫描C源代码并打印出函数/变量名列表或不同模块之间函数调用的交叉引用的东西
为了充分满足您的要求,您必须编写基本上是C编译器前端的程序;再多的正则表达式魔法也无法满足您的需求。获取C语言语法的yacc
able版本,然后使用lex
和yacc
(或flex
和bison
,或您选择的工具)创建解析器。然而,当您匹配一个函数声明时,您只需将其打印出来(或保存到数据库或类似的东西),而不是生成机器指令
通过现有的C预处理器(例如,gcc-e
)运行感兴趣的标题,去掉注释并执行任何宏扩展,然后将结果文件馈送到解析器中
编辑
现在我实际阅读了gcc
手册页,这里有一个选项-aux info
,它将编写翻译单元中声明/定义的所有函数的原型声明,包括在包含的头文件中声明的函数。更好的是,输出的格式比较好,比较规则,应该比较容易解析
所以,吸取的教训是:检查你的编译器文档,忽略像我这样仍然用80年代老式工具思考的老家伙 每个人最终都会在职业生涯中至少要求一次这样的工具;扫描C源代码并打印出函数/变量名列表或不同模块之间函数调用的交叉引用的东西 为了充分满足您的要求,您必须编写基本上是C编译器前端的程序;再多的正则表达式魔法也无法满足您的需求。获取C语言语法的
yacc
able版本,然后使用lex
和yacc
(或flex
和bison
,或您选择的工具)创建解析器。然而,当您匹配一个函数声明时,您只需将其打印出来(或保存到数据库或类似的东西),而不是生成机器指令
通过现有的C预处理器(例如,gcc-e
)运行感兴趣的标题,去掉注释并执行任何宏扩展,然后将结果文件馈送到解析器中
编辑
现在我实际阅读了gcc
手册页,这里有一个选项-aux info
,它将编写翻译单元中声明/定义的所有函数的原型声明,包括在包含的头文件中声明的函数。更好的是,输出的格式比较好,比较规则,应该比较容易解析
所以,吸取的教训是:检查你的编译器文档,忽略像我这样仍然用80年代老式工具思考的老家伙 编写一个LEXer和一个YACCer来检查开发人员的源代码,并将它们与开发人员的$INCLUDE\u路径中的源代码相匹配 包含路径中的文件与普通头文件的格式相同。关键词相同;但是,您可能会遇到像“extern”这样的词,对于初学者程序员来说,这些词可能并不常见。我建议您完全了解这些关键字,并了解它们在头文件中不同位置的功能
P:对于一个更复杂的解决方案,你必须考虑条件宏。
干杯。编写一个LEXer和一个YACCer来检查开发人员的源代码,并将它们与开发人员的$INCLUDE\u路径中的源代码相匹配 包含路径中的文件与普通头文件的格式相同。关键词相同;但是,您可能会遇到像“extern”这样的词,对于初学者程序员来说,这些词可能并不常见。我建议您完全了解这些关键字,并了解它们在头文件中不同位置的功能
P:对于一个更复杂的解决方案,你必须考虑条件宏。
欢呼$ cscope -bcq /usr/include/string.h
$ cscope -d -L1strcat
/usr/include/string.h strcat 92 extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
/usr/include/bits/string.h strcat 963 #define strcat(dest, src) \
/usr/include/bits/string3.h strcat 164 #define strcat(dest, src) \