Estrazione C / C ++ prototipi di funzione
-
21-09-2019 - |
Domanda
Voglio fare questo:
extract_prototypes file1.c file2.cpp file3.c
e hanno tutto ciò che lo script / programma di stampare una bella lista di prototipi di funzione per tutte le funzioni definite Nei rispettivi file C / C ++. Si deve gestire dichiarazioni multilinea bene.
C'è un programma che può fare questo lavoro? Il più semplice e meglio è.
EDIT:. Dopo aver provato a compilare due programmi C, punti bonus per qualcosa che utilizza {perl, python, ruby}
Soluzione
Lo strumento cproto fa ciò che si vuole e permette di ottimizzare l'output per le vostre esigenze .
Nota. Questo strumento funziona anche solo per i file C
Altri suggerimenti
Io uso ctags
# p = function declaration, f = function definition
ctags -x --c-kinds=fp /usr/include/hal/libhal.h
Funziona anche con C ++
ctags -x --c++-kinds=pf --language-force=c++ /usr/include/c++/4.4.1/bits/deque.tcc
Si noti, potrebbe essere necessario aggiungere includere percorsi, farlo utilizzando il -I /path/to/includes
.
http://cfunctions.sourceforge.net
(questo solo fa C e un sottoinsieme limitato di C ++. Disclaimer:. Questo è il mio programma)
Ho usato per usare Doxygen per generare la documentazione per il mio codice C ++. Io non sono un esperto, ma penso che è possibile utilizzare doxygen per generare una sorta di file di indice dei prototipi di funzione.
Ecco un rel="nofollow filo di qualcuno che chiedeva una domanda simile
gccxml
è interessante, ma stampare un albero XML. È necessario estrarre le informazioni su classi, funzioni, tipi, e anche i modelli specializzati di classe e di funzioni. uso gccxml
parser di GCC, quindi non c'è bisogno di fare il peggio wich lavoro è l'analisi del file C ++, e si è sicuri al 100% che è quello che probabilmente il miglior compilator capire.
Se si formatta i tuoi commenti opportunamente, si potrebbe provare a doxygen . In realtà, se non hai provato prima mi consiglia di dare un andare comunque - produrrà i grafici di successione, nonché liste di funzioni membro a pieno titolo e le descrizioni (da tuoi commenti)
.gcc-xml potrebbe aiutare, anche se, come lo è, lo fa solo la metà il lavoro che desiderate. Avrete bisogno di un po 'di elaborazione del output XML
È possibile eseguire il file sorgente attraverso questo programma:
/* 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;
}
Corri attraverso il preprocessore per sbarazzarsi di commenti. Se si dispone di bretelle senza eguali a causa di #ifdefs è necessario impostare definisce, includere i file per renderlo non così.
per es., cc cproto_parser.c -o cproto_parser; cc -E your_source_file.c|./cproto_parser