多くのファイルを持つC++プロジェクトですべての再帰関数の名前を調べたいと思います。 これを実行できるIDEまたはスクリプトはありますか?C++プロジェクトで再帰関数名リストを見つける方法
答えて
他人が考えるほど簡単ではありません。あなたはこれらを削除することもできますので、
関数呼び出しは、二重引用符で囲まれた文字列やコメントの内側にすることができます。文字列を削除するとき(または単語を0STRINGで置き換えるとき)、一致する二重引用符を検索する必要があります。
\\
と\"
のトークンに注意してください。これらをすべて削除した後でも、関数の開始、終了、呼び出しを見つけることが難しい場合があります。たとえば、テンプレート関数を考慮してください。また、f(a b){g(b);}は、マクロfが存在する場合には必然的に関数ではありません。たぶんあなたもこれを考慮に入れたいと思うかもしれません。また
:
次の関数が
class A {
F(int x) {
// ...
A::F(y);
}
}
次ながら再帰的である名前空間についても同じ
class A {
F(int x) {
// ...
B::F(y);
}
}
ではありません。 Namespace修飾子は、クラス修飾子と同様に、関数を非再帰的にすることができます。
crangeで相互参照リンクテーブルを作成し、それをawkで処理したい場合があります。
私はこのために独自のスクリプトを書く必要があり、それほど些細なことではないと思います。関数の呼び出しと同様に、関数の開始と終了を認識する必要があります。その部分はひどいことではありません。ただし、ネストされた関数のスタックを維持する必要があるため、この解析ポイントで最も内側の関数を常に知っています。一番内側の関数への呼び出しを見つけると、あなたは再帰を発見したと報告します。
minorlyトリッキーな場合には、このようなものです:
int func_a() {
...
int func_b() {
...
result = func_a()
}
recur = func_a()
最初の呼び出しは再帰的ではありません。 2番目はです。ネスティングがより深くなる可能性があります。をリテラル文字列のの外側に数えなければなりません - 左のブレースには1を加え、右のブレースには1を加え、最も内側の関数の "ブレースネスト"あなたのスタックに。
これはソリューションへの移行に役立ちますか?
- 1. 匿名関数/再帰C#
- 2. バイナリ再帰関数を使用してリストのインデックスを見つける
- 3. Linuxカーネルソースツリーの関数定義を再帰的に見つける
- 4. PHP - 任意の親の親を見つける再帰関数
- 5. 再帰関数との最大の要素を見つける
- 6. 再帰jsで最大ネスティングを見つける方法
- 7. ASP.NETで再帰的にコントロールを見つける方法
- 8. リストの最大値をスカラーで再帰的に見つける
- 9. C#再帰関数
- 10. 再帰関数C++
- 11. スカラでテール再帰を使用してリスト内の整数を見つける
- 12. 特定のオブジェクトフォームツリーを再帰的に見つける方法
- 13. 再帰的リスト関数
- 14. Pythonで再帰関数のリストを返す方法
- 15. 再帰素数関数C++
- 16. 角度の再帰関数を持つオブジェクトdiffを見つけよう
- 17. 再帰的ostream関数C++
- 18. 再帰的なC++関数
- 19. ボイド関数Cの再帰
- 20. C再帰関数 - GCD
- 21. c#再帰関数をコード化する効率的な方法
- 22. これらの関数を再帰的に解を見つけるように変更する方法
- 23. 再帰関数の呼び出しをカウントする方法(1ずつインクリメント)| C++
- 24. 2進数を再帰的に見つけるプログラム
- 25. 名前で兄弟ゲームオブジェクトを見つける方法。 Unity2d c#
- 26. 入れ子リスト内の同じ第2要素を見つける - 再帰関数
- 27. gitリポジトリをローカルで変更して再帰的に見つける方法は?
- 28. 再帰的なSQLクエリで完全なノードを見つける方法
- 29. 再帰文法のFIRSTとFOLLOWセットを見つけるには?
- 30. c#再帰的帰りに2つのリストを追加する
正規表現を実行するとすべてのファイルが処理されます – Kazz
正規表現がそこで助けになるかどうかわかりません... –
再帰的には、自分自身を直接呼び出すもの、またはコールチェーンを通じて再入力されるものを意味しますか?最初は非常に簡単なので、もう1つはかなり多くの作業が必要です(スタティックコード解析ツールでは、サイクルを調べるコールグラフを作成できます)。 – StoryTeller