2012-03-25 9 views
5

Ho terminato di inserire molte piccole funzioni inline in un file di intestazione che includo in molte unità di compilazione, , il codice è correttamente inserito dal compilatore e il programma funziona come un incantesimo.intestazione piena di funzioni inline, posso spostare il codice all'esterno del file di intestazione e ancora in linea tutto?

ma ora il file di intestazione è qualcosa di molto insolito (per essere un file di intestazione), per renderlo più leggibile ho pensato di fare qualcosa di simile:

#ifndef MY_HEADER_H 
#define MU_HEADER_H 

static inline 
void my_fnct (my_param a); 

#include "my_header.inline.c" 

#endif 

e il file my_header.inline.c sarà come:

static inline 
void my_fnct (my_param a) 
{ 
    // .. my code .. 
} 

poi, quando voglio queste funzioni ho appena includere il file di intestazione.

la mia domanda è: c'è un modo migliore per realizzare questo senza riempire un file di intestazione con troppo codice? o posso farlo e mi aspetto che altri sviluppatori capiscano questo codice senza problemi?

+1

Qual è il problema con l'avere funzioni inline nell'intestazione, di nuovo? le funzioni inline dovrebbero essere molto brevi, one-liner, davvero. – littleadv

+1

Per quanto riguarda le prestazioni del codice, l'unica cosa che si può vedere se è importante è la misura. Qual è il rallentamento del tuo compilatore con tutte le cose incluse? La mia esperienza è che tali cose sono trascurabili con i compilatori moderni. E non vale la pena di avere centinaia di opzioni di configurazione facilmente confondibili. –

risposta

1

No, non è possibile. Tuttavia, è possibile utilizzare la funzione di ottimizzazione Link Time di GCC (quindi alcune chiamate potrebbero essere inline, anche se la funzione non è dichiarata inline e non disponibile nelle intestazioni per ogni unità di compilazione), ad es. compilare e collegare con gcc -flto (ciò richiede un compilatore GCC recente, ad esempio 4.6 almeno e rallenta il tempo di compilazione).

1

Una pratica che non mi piace personalmente è estrarre le funzioni inline in un file separato con l'estensione .inl. Questa è solo una convenzione e puoi dare un nome al file come preferisci. Ho un IDE che piega il codice in modo da poter nascondere solo le cose che non voglio vedere piuttosto che avere un file separato.

Problemi correlati