2012-02-12 14 views
18

Ci sono alcuni casi in cui includiamo file cpp, invece di file di intestazione standard (h), ad esempio:Includere cpp invece di intestazione (h)

#include "example.cpp" 

invece di

#include "example.h" 

Sembra funzionare ma è sicuro o dovrei evitarlo?

E il tempo di compilazione?

+0

È sicuro come lo si fa. In genere non dovrebbe essere necessario. La programmazione non riguarda il seguire ciecamente un aereo da carico, ma piuttosto il * capire * cosa stai facendo e prendere decisioni basate sulla comprensione e il ragionamento. –

+1

L'unica ragione valida che abbia mai visto per questo è risparmiare tempo sul collegamento. [Unity Build è spiegato qui] (http://stackoverflow.com/questions/543697/include-all-cpp-files-into-a-single-compilation-unit). –

+0

@sysop: come ho detto: ** capire ** cosa stai facendo e chiedere, prima. Include sono elaborati dal * preprocessore *, molto prima che avvenga qualsiasi compilazione. Comprendi il preprocessore e saprai quando è opportuno includere le cose. –

risposta

19

È una codifica pigra. Usa i file di intestazione. Sì, possono aumentare il tempo di compilazione, ma significano che puoi facilmente reimplementare blocchi del tuo codice, o meglio ancora, un altro sviluppatore potrebbe in qualsiasi momento. Il file di intestazione funge da modello per ciò che il codice C/C++ sta per fare. È una cattiva idea scartarla o ignorarla.

+0

Sono sempre in uso .h, ma abbiamo un bel dibattito qui ed è per questo che chiedo. – sysop

+2

@sysop - per essere onesti, "La codifica pigra" è un po 'iperbolico. Ci sono casi in cui potrebbe essere effettivamente la cosa giusta da fare, ma nel caso generale direi che è una cattiva forma. – zellio

+8

L'inclusione dei file '.h' invece dei file' .cpp' può velocizzare ** la compilazione molto tempo perché consente di eseguire ricompilazioni parziali. – tom

1

L'ho usato prima e non ho avuto problemi, ma non posso garantire che questo sia sicuro. A volte questa era l'unica opzione per me, quindi l'ho usata, altrimenti userò il file .h.

+0

C'è sempre un'altra opzione a.k.a. mai dire mai. – LihO

3

ci sono usi legittimi per #include "impl.cpp":

  1. test per l'accesso alle variabili statiche/etc

  2. modelli ad hoc, come questi, se il meccanismo C++ modello si rivela insufficiente (rara)

    #define MACRO (...)

    #include "impl.cpp" // uses MACRO

Nota che #include "impl.cpp" può essere pericoloso lo stesso file è incluso in unità di compilazione separate successivamente collegate.

7

Sono d'accordo con Kerrek SB.

L'ho fatto una volta. Stavo creando una libreria di compressione eccellente e ampiamente utilizzata che doveva essere costruita separatamente per le immagini a 8 bit e per le immagini a 12 bit. Il modo più pulito con cui ho potuto inserirmi nel sistema di build era (semplificando un po ') di avere due file .cpp master, uno che imposta #defines per una build a 8 bit, l'altro per una build a 12 bit. I file master .cpp quindi #includono i file sorgente della libreria di compressione.

Va bene non seguire una regola generale se si capisce bene la regola per conoscerne i motivi e perché potrebbe non essere applicabile nel tuo caso. (Ma quei casi dovrebbero essere rari.)

Problemi correlati