C / C ++の関数のプロトタイプを抽出します
-
21-09-2019 - |
質問
私はこれをしたい:
extract_prototypes file1.c file2.cpp file3.c
、スクリプト/プログラムが与えられたC / C ++ファイルで定義されたすべての関数の関数プロトタイプの素敵なリストを印刷するものは何でも持っています。これは、うまく複数行の宣言を処理する必要があります。
のこの仕事を行うことができますプログラムがありますか?のシンプルな優れたています。
2つのCプログラムをコンパイルしようとした後、何かのためのボーナスポイントの用途{PerlやPython、ルビー} そのEDIT。
解決
ツール cprotoのの欲しいものを行い、ユーザーの要件に同調するように出力することができますます。
注:のこのツールはまた、唯一のCファイルに対して動作します。
他のヒント
私が使用ctags
# p = function declaration, f = function definition
ctags -x --c-kinds=fp /usr/include/hal/libhal.h
また、C ++
で動作しますctags -x --c++-kinds=pf --language-force=c++ /usr/include/c++/4.4.1/bits/deque.tcc
<時間>
注、あなたは-I /path/to/includes
を使ってこれを行う、パスを含める追加する必要があります。
http://cfunctions.sourceforge.netする
(これが唯一のCおよびC ++の限定されたサブセットを行い免責事項:。。これは私のプログラムである)
私はC ++コードのドキュメントを生成しました。doxygenを使用するために使用されます。私は専門家ではないけど、私はあなたが関数プロトタイプのインデックスファイルのいくつかの並べ替えを生成するために、doxygenのを使用することができると思います。
ここでのスレッドであります誰か同様の質問をして、
gccxml
に興味深いですが、それはXMLツリーを印刷します。あなたは、クラス、関数、型、さらには特殊なクラスのテンプレートや機能についての情報を抽出する必要があります。 GCCのgccxml
利用パーサ、あなたがC ++ファイルを解析しているウィッヒ最悪の仕事をする必要はありません、あなたは100%を確認してください、それはおそらく最高compilatorが理解だということですので。
は、 Doxygenのに試みることができます。あなたはそれを試していませんでした場合は実際に、私はとにかくそれを行くを与えることをお勧めしたいの前に - それは(あなたのコメントから)継承グラフだけでなく、完全なメンバ関数のリストと説明を生成します。
。GCC-XML のかもしれない助け、それがあるとして、それは半分しかありませんが、あなたがしたい仕事。あなたは、XML出力のいくつかの処理をする必要があります。
あなたはこのプログラムを通じて、ソース・ファイルを実行することができます:
/* cproto_parser.c */
#include <stdio.h>
int main (void)
{
int c;
int infundef = 0;
int nb = 0,
np = 0;
while((c=getc(stdin))!=EOF){
if(c=='{'){
if((np==0)&&(nb==0)){infundef=1;}
nb++;
}
if (infundef==0) {putc(c,stdout);}
if(c=='}'){
if((np==0)&&(nb==1)){infundef=0;}
nb--;
}
if(c=='('){np++;}
if(c==')'){np--;}
}
return 0;
}
コメントを取り除くために、プリプロセッサによるファイル名を指定して実行。あなたが原因#ifdefsに比類のない括弧を持っている場合は、セット定義を持って、ではないので、それを作るためのファイルが含まれます。
例えば、cc cproto_parser.c -o cproto_parser; cc -E your_source_file.c|./cproto_parser