我有一个大的.h文件,其中定义了许多函数。这些函数是用户在运行时调用以使用我的代码执行特定操作的函数。记住这些函数的名称是很乏味的,甚至我必须回到源代码来记住我给这些函数的确切名称。
所以,我想知道我可以编写一个函数来列出给定.h文件中定义的所有函数,甚至可以根据一些正则表达式进行过滤。 如果可能的话,“搜索”必须在运行时可以不读取源。
答案 0 :(得分:2)
您可以手动硬编码这样的函数,或者编写一个分析.h文件的脚本来生成代码。
据我所知,没有办法直接在c ++中这样做,因为它需要使用reflections而c / c ++不是反射语言。
<强>更新强>
如果您在Linux系统上运行,则可以访问库的符号表以执行所需的任务。查看dladdr的手册页以便进一步阅读(还有一个例子可以稍微讨论一下)。
我的方法是尝试缩小图书馆的地址空间,然后通过dladdr(void* addr, Dl_info* info)
命令nm可能会帮助您,因为它列出了可用符号及其对象文件的地址
答案 1 :(得分:2)
有像doxygen(只是google)这样的工具可以帮助你记录源代码;但它不是运行时。
但问题看起来似乎更深。
您需要编写有意义的函数和方法名称;这些名称对于编写代码的人来说意味着什么。
您需要为描述函数的函数编写有效的描述性(并且至少是最小的)注释(可能比名称更复杂)。
将代码拆分为逻辑命名空间/类(和文件)以清除代码并限制每个头文件的功能数。
祝你好运。答案 2 :(得分:1)
我知道的唯一方法是对.h文件进行fstream并解析它。或者你可以采用虚拟方式,只需将函数名称保存在矢量或数组中或类似的东西中。
答案 3 :(得分:0)
我发现做这样的事情的最佳方式,你想要从程序中访问头文件中的元数据,就是创建一个包含你想要的所有函数的数据库(在一些外部文件中),然后运行脚本以生成头文件。
例如,您可以拥有
的CSV或TSV文本文件 FunctionName,Description,Arg0Type, Arg0Description,...
然后编写另一个程序(在python / perl / C ++ / etc中)来创建一个看起来像
的头文件 int FunctionName(Arg0Type arg0);
....
和
中的c文件 struct {
int (*funcptr)();
const char* name;
const char* description;
} database[] = {
{ FunctionName, "FunctionName", "Description"},
...
};
然后在应用程序中编写代码以在database[]
中搜索帮助和函数指针。