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}

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top