0

多くの関数が定義されている大きな .h ファイルがあります。これらの関数は、コードで特定の操作を実行するためにユーザーが実行時に呼び出すものです。これらの関数の名前を覚えるのはちょっと面倒で、関数に付けた正確な名前を思い出すためにソース コードに戻る必要がある場合もあります。

そのため、特定の .h ファイルで定義されているすべての関数をリストする関数を作成できるのではないかと考えていました。おそらく、正規表現に従ってフィルタリングすることもできます。「検索」は、可能であれば、ソースを読み取らずに実行時に実行できる必要があります。

4

4 に答える 4

2

このような関数を手動でハードコーディングするか、.h ファイルを分析してコードを生成するスクリプトを作成することができます。

私の知る限り、リフレクションを使用する必要があり、c/c++ はリフレクション言語ではないため、これを C++ で直接行う方法はありません。

アップデート:

Linux システムで操作している場合、ライブラリのシンボル テーブルにアクセスして目的のタスクを実行できる場合があります。詳細については、 dladdrの man ページを参照してください(少し試してみる例もあります)。

私のアプローチは、ライブラリのアドレス空間を狭め、その後でシンボルをスキャンしようとすることですdladdr(void* addr, Dl_info* info)

コマンドnmは、使用可能なシンボルとオブジェクト ファイルのアドレスを一覧表示するため、途中で役立つ場合があります。

于 2013-10-03T14:07:06.807 に答える
2

ソースコードを文書化するのに役立つdoxygen(グーグルで検索してください)のようなツールがあります。しかし、それは実行時ではありません。

しかし、問題は見た目よりも深いようです。

意味のある関数名とメソッド名を書く必要があります。コードを書く人にとって何かを意味する名前。

関数を説明する有効で説明的な (そして少なくとも最小限の) コメントを記述する必要があります (名前が示唆するよりも複雑になる可能性があります)。

コードを論理的な名前空間/クラス (およびファイル) に分割して、コードを整理し、ヘッダー ファイルごとの関数の数を制限します。

幸運を。

于 2013-10-03T14:09:37.433 に答える
1

私が知っている唯一の方法は、.h ファイルを fstream して解析することです。または、ダミーの方法で、関数名をベクトルまたは配列などに保存することもできます。

于 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 に答える