2011-11-20 12 views
14

Esiste uno strumento per riordinare automaticamente il file .c in base a .h?Riordina la funzione nel file c in base al file di intestazione c

Per esempio, foo.h

void function1(); 
void function2(); 
void function3(); 

E foo.c

void function2(){} 
void function1(){} 
void function3(){} 

Posso riordinare come

void function1(){} 
void function2(){} 
void function3(){} 

A proposito, sto usando Vim in Ubuntu.

+1

Interessante. ViM può fare un sacco di cose (ho visto un esempio di "risolvere labirinti"). Potresti finire per scrivere un grande copione per questo. Anche se qualcosa mi dice che dovresti essere in grado di farlo con i macro. – Shahbaz

+1

Ad esempio, una macro che copia una funzione è semplice. Si inizia all'inizio della funzione, si inizia la visualizzazione, (dopo aver cercato '{') premere 'n', quindi'% ', quindi' d'. Ora hai la funzione tagliata. Tutto ciò di cui hai bisogno ora è trovare la sua posizione corretta e inserirla ... Mi chiedo ... – Shahbaz

+0

Sembra un buon progetto di programmazione C da intraprendere. –

risposta

2

Non credo che ci sia un tale strumento. In C, l'ordine di dichiarazione e definizione generalmente non ha importanza. C'è ovviamente l'eccezione di un ciclo di dipendenza (a() chiamate b() che chiama a()), ma quando le funzioni sono dichiarate in un file di intestazione, anche questo non è un problema, dal momento che tutte le dichiarazioni sono effettivamente le dichiarazioni "avanti" necessarie per gestire anelli di dipendenza.

Quindi l'ordine delle definizioni in un'unità di traduzione è essenzialmente una questione di gusto e stile. In quanto tale, non è una caratteristica che i progettisti dell'editor sono in grado di affrontare, dal momento che lo sforzo di creare caratteristiche generali e abbastanza potenti da essere utili per una preponderanza di utenti può essere considerato di dimensioni proibitive. Pensa a quanto tempo occorrono per gli editori (non programmabili) di avere in genere funzionalità di rientro e rielaborazione automatiche flessibili e potenti.

C'è anche il rischio di rompere la logica, la grammatica o la leggibilità del codice quando viene riorganizzato automaticamente. Ad esempio, se i commenti si trovano tra le definizioni di funzione, in che modo lo strumento sa se un commento va con una funzione particolare, o con un gruppo di funzioni, o con la funzione sopra? E come @Yuri menziona sopra, per quanto riguarda le funzioni all'interno di # if/# else/# endif blocks? E che dire dei casi sottili come le macro che si espandono in funzioni o le direttive includono solo le definizioni delle funzioni? Suppongo che una funzionalità di riordino possa limitare il dominio a un caso semplice, ma se il caso diventa troppo semplice, il suo fascino è corrispondentemente limitato e non viene rilasciato pubblicamente o ampiamente.

Tutto ciò detto, penso che con un ricco set di strumenti a disposizione, una funzione del genere non sarebbe troppo difficile da implementare, anche se se lo facessi, mi aspetto che alla prima difficoltà imprevista, mi troverei chiedendo se non sarebbe più semplice modificare a mano i file sorgente. Il taglio e incolla multilinea è abbastanza semplice, dopo tutto.

+3

Hmmm. Sembra un sacco di testo per dire "Non che io sappia". :) –

Problemi correlati