Ich möchte herausfinden, alle rekursiven Funktionen in einem C++ Projekt, die viele Dateien haben. Gibt es irgendwelche IDE oder Skripte können dies tun?Wie finde ich rekursive Funktion Namensliste in einem C++ Projekt
Antwort
Es ist nicht so einfach wie andere vielleicht denken.
Ein Funktionsaufruf kann in einer Zeichenfolge mit doppelten Anführungszeichen oder einem Kommentar enthalten sein. Sie können diese also entfernen. Wenn Sie Strings entfernen (oder sie durch das Wort 0STRING ersetzen), sollten Sie nach einem passenden doppelten Anführungszeichen suchen. Achten Sie auf
\\
und\"
Token.Auch nachdem Sie alle diese Funktionen entfernt haben, kann das Auffinden von Funktionsstart, -ende und -aufruf eine Herausforderung sein. Berücksichtigen Sie beispielsweise Vorlagenfunktionen. Außerdem ist f (a b) {g (b);} nicht notwendigerweise eine Funktion, wenn ein Makro f vorhanden ist. Vielleicht möchten Sie dies auch berücksichtigen.
auch:
Die folgende Funktion rekursiv
class A {
F(int x) {
// ...
A::F(y);
}
}
während der folgenden ist nicht
class A {
F(int x) {
// ...
B::F(y);
}
}
Gleiche zu Namens. Namespace-Qualifikationsmerkmal, wie Klassenqualifizierer, kann die Funktion nicht-rekursiv machen oder nicht.
Sie können die Querverweisliste mit crange erstellen und dann mit awk verarbeiten.
Ich fürchte, dass Sie dafür ein eigenes Skript schreiben müssten, und es ist nicht ganz trivial. Sie müssen Anfang und Ende einer Funktion sowie einen Funktionsaufruf erkennen. Dieser Teil ist nicht schrecklich. Sie müssen jedoch einen Stapel verschachtelter Funktionen verwalten, damit Sie immer die innerste Funktion an diesem Analysepunkt kennen. Wenn Sie einen Aufruf für die innerste Funktion finden, melden Sie, dass Sie eine Rekursion gefunden haben.
Der minorly tricky Fall ist so etwas wie dieses:
int func_a() {
...
int func_b() {
...
result = func_a()
}
recur = func_a()
Der erste Anruf nicht rekursiv ist; der zweite ist. Die Verschachtelung kann tiefer werden - Sie müssen die Klammern außerhalb der Literalzeichenfolgen zählen - 1 für eine linke Klammer hinzufügen, eine für eine rechte Klammer subtrahieren und die Summe für die "Klammerverschachtelung" -Nummer der innersten Funktion überprüfen auf deinem Stapel.
Hilft das Ihnen dabei, eine Lösung zu finden?
- 1. Wie benutze ich die Namensliste in pgdbg?
- 2. C++ Rekursive Funktion Infinite Loop
- 3. unendliche Menü rekursive Funktion C#
- 4. C++: rekursive Funktion für Array
- 5. Wie finde ich Verwendungen einer Objective-C-Funktion in Xcode?
- 6. GPU beschleunigt rekursive Funktion in C++
- 7. Wie finde ich einen Breakpoint in C#?
- 8. Wo finde ich die Datei application.exe.config in meinem C# -Projekt?
- 9. Wie kann ich rekursive linq Funktion tun?
- 10. in rekursive Funktion, Reaktion
- 11. Wie implementiere ich das als rekursive Funktion?
- 12. Wo finde ich proguard.cfg in meinem Projekt?
- 13. Rekursive Funktion in Minesweeper
- 14. Wie finde ich die globale Funktion?
- 15. Wie finde ich die Endadresse einer Funktion in einem C prog?
- 16. rekursive Funktion in CakePHP
- 17. rekursive Minenexplosion Funktion bei einem Brettspiel
- 18. Wie mache ich diese rekursive Funktion in Python iterativ?
- 19. Wie reduziere ich diese Funktion in eine rekursive?
- 20. Wie finde ich find_module?
- 21. Wie erstelle ich eine zufällige Namensliste ohne Wiederholung in PHP?
- 22. Wie kann ich eine rekursive Funktion in umgekehrter Reihenfolge aufrufen?
- 23. Ich kann meine rekursive Funktion nicht erhalten, um Buchstaben in einem String richtig zu zählen (C++)
- 24. C rekursive Funktion nicht return true
- 25. rekursive Funktion
- 26. Rekursive Funktion
- 27. Konvertieren in eine rekursive Funktion?
- 28. C# Wie verwende ich benutzerdefinierte Schaltfläche in einem anderen Projekt?
- 29. Stapelgrößenbemaßung durch rekursive Funktion
- 30. Wie stelle ich eine rekursive Funktion in Lisp fest?
run regex über alle Dateien sollte den Job tun – Kazz
Ich bin mir nicht sicher, eine Regex würde da helfen ... –
Mit rekursiv meinen Sie diejenigen, die sich selbst anrufen, oder auch diejenigen, die über eine Aufrufkette wieder eingegeben werden? Da der erste ziemlich einfach zu kochen ist, erfordert der zweite ziemlich viel mehr Arbeit (ein statisches Code-Analyse-Tool kann einen Aufrufgraphen erstellen, den Sie für Zyklen untersuchen können). – StoryTeller