0

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

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

4

4 回答 4

2

您可以手动对此类函数进行硬编码,或者编写分析 .h 文件以生成代码的脚本。

据我所知,没有办法直接在 c++ 中执行此操作,因为它需要使用反射,而 c/c++ 不是反射语言。

更新:

如果您在 linux 系统上操作,则可以访问库的符号表以执行所需的任务。查看dladdr的手册页以进一步阅读(还有一个示例可以玩一点)。

我的方法是尝试缩小库的地址空间,然后通过以下方式扫描符号dladdr(void* addr, Dl_info* info)

命令nm可能会帮助您,因为它列出了目标文件的可用符号及其地址

于 2013-10-03T14:07:06.807 回答
2

有像 doxygen (谷歌一下)这样的工具可以帮助你记录源代码;但它不是运行时。

但问题似乎比它看起来更深。

您需要编写有意义的函数和方法名称;对编写代码的人来说意义重大的名称。

您需要为将描述函数的函数(可能比名称可能暗示的更复杂)编写有效且描述性(并且至少最少)的注释。

将代码拆分为逻辑命名空间/类(和文件)以清除代码并限制每个头文件的函数数量。

祝你好运。

于 2013-10-03T14:09:37.433 回答
1

我知道的唯一方法是流式传输 .h 文件并解析它。或者您可以采用虚拟方式并将函数名称保存在向量或数组或类似的东西中。

于 2013-10-03T14:07:55.877 回答
0

我找到了做这样的事情的最好方法,你希望从程序中访问头文件中的元数据,是创建一个包含你想要的所有函数的数据库(在某个外部文件中),然后运行一个脚本生成文件。

例如,您可以有一个 CSV 或 TSV 文本文件,其中包含

  FunctionName,Description,Arg0Type, Arg0Description,...

然后编写另一个程序(在 python/perl/C++/etc 中)创建一个头文件,看起来像

 int FunctionName(Arg0Type arg0);
  ....

和 ac 文件出来

 struct {
    int (*funcptr)();
    const char* name;
    const char* description;
 } database[] = { 
     { FunctionName, "FunctionName", "Description"},
      ...
 };

然后在您的应用程序中编写代码以搜索database[]帮助和函数指针。

于 2013-10-03T14:30:41.043 回答