Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在.h中运行函数列表_C++ - Fatal编程技术网

C++ 如何在.h中运行函数列表

C++ 如何在.h中运行函数列表,c++,C++,我有一个很大的.h文件,其中定义了许多函数。这些函数是用户在运行时调用的,用我的代码执行特定操作。记住这些函数的名称有点乏味,甚至我经常不得不回到源代码中去记住我给这些函数的确切名称 所以,我想知道我是否可以编写一个函数,列出给定的.h文件中定义的所有函数,甚至可以根据一些正则表达式进行过滤。 如果可能的话,“搜索”必须在运行时不读取源代码就可以执行。您可以手动硬编码这样的函数,或者编写脚本分析.h文件以生成代码 据我所知,在C++中没有直接的方法,因为它需要使用,而C/C++不是反射语言。 更

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

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

您可以手动硬编码这样的函数,或者编写脚本分析.h文件以生成代码

据我所知,在C++中没有直接的方法,因为它需要使用,而C/C++不是反射语言。 更新:

如果您在linux系统上操作,则可以访问库的符号表以执行所需的任务。请看手册页,以便进一步阅读(这里还有一个示例供大家参考)

我的方法是缩小库的地址空间,然后通过
dladdr(void*addr,Dl_info*info)


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

您可以手动硬编码这样的函数,或者编写一个脚本来分析.h文件以生成代码

据我所知,在C++中没有直接的方法,因为它需要使用,而C/C++不是反射语言。 更新:

如果您在linux系统上操作,则可以访问库的符号表以执行所需的任务。请看手册页,以便进一步阅读(这里还有一个示例供大家参考)

我的方法是缩小库的地址空间,然后通过
dladdr(void*addr,Dl_info*info)


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

我知道的唯一方法是对.h文件进行流式处理并对其进行解析。或者你可以采用虚拟的方式,将函数名保存在向量、数组或类似的东西中。

我知道的唯一方法是对.h文件进行流式处理并对其进行解析。或者你也可以采用虚拟的方式,只需将函数名保存在向量或数组或类似的东西中。

有一些工具,比如doxygen(只需谷歌一下),可以帮助你记录源代码;但它不是运行时

但问题似乎比看上去更严重

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

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

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


祝你好运。

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

但问题似乎比看上去更严重

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

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

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


祝你好运。

我发现这样做的最好方法是创建一个包含所有所需函数的数据库(在某个外部文件中),然后运行一个脚本来生成头文件

例如,您可以有一个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"},
      ...
 };

然后在应用程序中编写代码,搜索
数据库[]
,以获取帮助和函数指针。

我发现这样做的最佳方法是,如果希望从程序内部访问头文件中的元数据,则创建一个包含所有所需函数的数据库(在某个外部文件中)然后运行脚本生成头文件

例如,您可以有一个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"},
      ...
 };

然后在应用程序中编写代码,在
数据库[]
中搜索帮助和函数指针。

grep funcname header。您好,我不确定此函数应使用哪种语言编写。正如库多格在评论中指出的那样,完全可以在程序之外生成列表,然后在以后引用它;也许是从程序内部,也许是一个独立的文本文件。你可以在C++中做它,但是你不能在C++中做它而不写C++之外的代码,它解析头文件,然后链接Reults.GRIP函数名头。正如库多格在评论中指出的那样,完全可以在程序之外生成列表,然后在以后引用它;也许是从程序内部,也许是一个独立的文本文件。你可以在C语言中做,但是你不能在C++中做,而不需要在C++外面编写代码来解析头文件,然后链接结果。我看这有点超出C++本身的范围。我最好开发一个函数来分析