Unternehmensrichtlinien schreiben vor, dass jede Funktion im C-Quellcode einen Prototyp hat. Ich habe ein Projekt mit einem eigenen make-System geerbt (so kann ich nicht es auf gcc oder Visual Studio testen) und festgestellt, dass eine der Dateien einige statische Funktionen ohne Prototypen deklariert hat. Gibt es einen Weg (nicht unbedingt mit einem Compiler) alle Funktionen ohne Prototypen in allen .c Dateien aufzulisten?Wie finden Sie C-Funktionen ohne einen Prototyp?
Antwort
gcc hat eine Option, Sie darüber zu warnen:
gcc -Wmissing-prototypes
Sie diese Warnung in einen Fehler machen kann es Kompilierung und die Menschen zwingen, beheben zu stoppen:
gcc -Werror=missing-prototypes
Wenn Sie nur wollen um es aufzulisten können Sie mit der gcc
Option -Wmissing-prototypes
und grep für keinen vorherigen Prototyp für im Protokoll kompilieren.
aktualisieren basierend auf bearbeiten:
Da Sie jetzt erwähnen, dass Sie nicht gcc verwenden können, erhalten Sie eine ähnliche Option für Ihren aktuellen Compiler finden müssen. Die meisten Compiler haben eine solche Option. Beginnen Sie mit der Manpage oder der integrierten Hilfeausgabe.
Sorry, wenn ich es nicht klar gemacht habe, aber es hat sein eigenes Build-System, also kann ich es nicht auf gcc testen. – Gnubie
"Build-System"! = "Compiler". Ich würde annehmen, dass jeder Compiler, den dieses System verwendet (gcc/icc/clang/.......), verschiedene Optionen/Schalter hat, um Warnungen/Fehler/etc. Zu aktivieren. Das wäre der richtige Ort, um loszulegen, auch wenn es nicht gcc ist ... – twalberg
ok, ich werde es überprüfen. Danke allen! – Gnubie
ctags
kann das tun!
--c-kinds=p
erzeugt die Liste aller Funktionsprototypen
--c-kinds=f
erzeugt die Liste aller Funktionsdefinitionen
Jetzt müssen Sie nur diejenigen vergleichen.
diff -u <(ctags -R -x --sort=yes --c-kinds=f | cut -d' ' -f1) <(ctags -R -x --sort=yes --c-kinds=p | cut -d' ' -f1) | sed -n 's/^-//p'
+1 das ist eine schöne Lösung! – jman
- 1. Javascript: Funktionen ohne Prototyp
- 2. Delegate.CreateDelegate ohne Prototyp
- 3. Prototypische Vererbung ohne Prototyp?
- 4. Einen Objekt-Prototyp ausschalten
- 5. Ruft printf ohne einen richtigen Prototyp ein undefiniertes Verhalten auf?
- 6. Finden Sie Daten ohne Schlüsselwert
- 7. Wie man einen Prototyp in Typoskript einbinden
- 8. Call-C-Adresse als Funktion ohne Prototyp
- 9. Finden Sie ein Feld ohne einen Namen in Mechanize
- 10. Finden Sie einen Datensatz in dbSet mit Suche ohne Primärschlüssel
- 11. Prototyp iOS App stürzt ohne Spur
- 12. Finden Sie einen Median parallel
- 13. JavaScript und Standardwerte für einen Prototyp
- 14. Finden Sie alle Links * ohne * eine Klasse
- 15. Wie vermeidet man einen Konflikt zwischen JQuery und Prototyp
- 16. Finden Sie jeden Text ohne Tags
- 17. Wie Javascript Prototyp erweitern?
- 18. Wie finden Sie, welchen Wert dieser Code ohne Computer zurückgibt?
- 19. Finden Sie ausführbare Dateien ohne Erweiterungen?
- 20. Finden Sie Zeilen ohne wiederholten Text
- 21. Wie schreibe ich einen Prototyp für Number.toFixed in JavaScript?
- 22. Stubbing einen Prototyp-Methode mit sinon
- 23. Einen Prototyp des Typs "struct" deklarieren - C
- 24. Finden Sie Rechtecke ohne Ecken mit opencv
- 25. einen Prototyp Constructor in C++ schreiben
- 26. Javascript - Nebenwirkungen des Einfrierens einen Konstruktor Prototyp
- 27. Wie finden Sie die Schnittstellen eines COM ohne Typelib?
- 28. einen Prototyp Aktualisieren einer Instanz in JavaScript
- 29. Eine neue Methode für einen Prototyp deklarieren
- 30. Dojo, Prototyp und JQuery
statische Funktionen nicht wirklich brauchen Prototypen, es sei denn, sie genannt werden, bevor sie definiert sind –
@ Paul: Ja, aber ich nehme an, es den Projektmanager ermöglicht es, schnell zu sehen, welche Funktionen verfügbar sind usw. – Gnubie
Wenn Sie können keinen anderen Compiler verwenden. Aus unbekannten Gründen müssen Sie ein separates Tool zur statischen Analyse erstellen. Alle diese Werkzeuge auf dem Markt werden alle fehlenden Prototypen für Sie finden – Lundin