如何运行.h中的函数列表

时间:2013-10-03 14:02:29

标签: c++

我有一个大的.h文件,其中定义了许多函数。这些函数是用户在运行时调用以使用我的代码执行特定操作的函数。记住这些函数的名称是很乏味的,甚至我必须回到源代码来记住我给这些函数的确切名称。

所以,我想知道我可以编写一个函数来列出给定.h文件中定义的所有函数,甚至可以根据一些正则表达式进行过滤。 如果可能的话,“搜索”必须在运行时可以不读取源。

4 个答案:

答案 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[]中搜索帮助和函数指针。