Extrahieren von C / C ++ Funktionsprototypen
-
21-09-2019 - |
Frage
Ich möchte, dies zu tun:
extract_prototypes file1.c file2.cpp file3.c
und haben auch immer Skript / Programm für alle in den gegebenen C / C ++ Dateien definierten Funktionen eine schöne Liste von Funktionsprototypen drucken. Es muss schön mehrzeiligen Erklärungen behandeln.
Gibt es ein Programm, das diese Arbeit erledigen kann? Je einfacher, desto besser.
EDIT:. Nach dem Versuch, zwei C-Programme, Bonuspunkte für etwas zu kompilieren, dass verwendet {Perl, Python, Ruby}
Lösung
Das Tool cproto tut, was Sie wollen, und ermöglicht die Ausgabe auf Ihre Anforderungen abstimmen .
. Hinweis: Dieses Tool funktioniert auch nur für C-Dateien
Andere Tipps
Ich verwende ctags
# p = function declaration, f = function definition
ctags -x --c-kinds=fp /usr/include/hal/libhal.h
Funktioniert auch mit C ++
ctags -x --c++-kinds=pf --language-force=c++ /usr/include/c++/4.4.1/bits/deque.tcc
Beachten Sie, Sie können hinzufügen müssen Pfade enthalten, tun dies die -I /path/to/includes
verwendet wird.
http://cfunctions.sourceforge.net
(Dies nur, dass C und eine begrenzte Teilmenge von C ++ Haftungsausschluss:.. Das ist mein Programm)
Früher habe ich Gebrauch doxygen Dokumentation für meinen C ++ Code zu generieren. Ich bin kein Experte, aber ich denke, Sie doxygen verwenden irgendeine Art von Index-Datei der Funktionsprototypen zu erzeugen.
Hier ist ein Faden jemand eine ähnliche Frage zu stellen
gccxml
ist interessant, aber es hat eine XML-Struktur drucken. Sie müssen extrahieren Informationen über Klasse, Funktionen, Typen und auch die spezialisierten Vorlagen von Klasse und Funktionen. gccxml
Verwendung Parser von GCC, so brauchen Sie nicht die schlechteste Arbeit zu tun Weichen C ++ Datei Parsen, und Sie sind 100% sicher, dass es ist, was wahrscheinlich die beste compilator zu verstehen.
Wenn Sie Ihre Kommentare in geeigneter Weise zu formatieren, können Sie versuchen, Doxygen . In der Tat ist es, wenn Sie nicht versucht haben, bevor würde ich empfehlen, ihm zu gehen geben sowieso - es Vererbungsgraphen produzieren sowie Vollmitglied Funktionslisten und Beschreibungen (aus Ihren Kommentar)
.gcc-xml könnte helfen, obwohl, wie es ist, ist es nur, dass die Hälfte die Arbeit, die Sie wollen. Sie werden einige Verarbeitung der XML-Ausgabe benötigen
Sie können die Quelldatei durch dieses Programm ausführen:
/* 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;
}
Ausführen durch den Präprozessor lose Kommentare zu bekommen. Wenn Sie aufgrund #ifdefs unerreichte Streben haben müssen Sie Satz definiert, sind Dateien, die es nicht so zu machen.
z. B. cc cproto_parser.c -o cproto_parser; cc -E your_source_file.c|./cproto_parser