2013-01-11 12 views
7

Penso che il preprocessore gestisca i file uno per uno e non riesco a capire come farlo con include, quindi penso che sia impossibile, ma sarebbe bello ascoltare i pensieri degli altri.È possibile utilizzare #define da un altro file cpp?

ho in a.cpp:

#define A 1 

e voglio usarlo da 2.cpp.

MODIFICA: Non riesco a modificare il primo file. Quindi per ora ho appena copiato definisce. Ma la domanda è ancora aperta.

risposta

16

Definisce all'interno di un file di origine non sono viste da altre unità di traduzione. I file di implementazione sono compilati separatamente.

è possibile

  • metterli in un colpo di testa e includerlo
  • utilizzare le opzioni del compilatore
  • farlo nel modo più sano di mente - const int A = 1; in un file di implementazione e dichiarare quando si desidera utilizzare it extern const int A;.

Di questi, direi la prima opzione è forse il peggiore che si può utilizzare.

+0

per ora l'opzione con extern sembra il modo più sano e meno invasivo per risolverlo, +1 – Yola

+2

Devo discutere con l'affermazione generale che includere il #define in un'intestazione è il modo peggiore per farlo! Non voglio essere tutto il Daily WTF "Ah bene, se sei in un ambiente embedded senza file system blah blah" a riguardo, ma ci sono sicuramente situazioni in cui un #define è molto meglio di un const int. – Vicky

+0

In termini di dipendenze tra i file e le opzioni di accoppiamento 1 e 3 sembrano equivalenti. Mi sto perdendo qualcosa qui? – CpILL

7

Se si desidera condividere una definizione tra due file di origine, spostarla in un file di intestazione e includere tale intestazione da entrambi i file di origine.

mydefines.h:

#ifndef MY_DEFINES_H 
#define MY_DEFINES_H 

#define A (1) 
// other defines go here 

#endif // MY_DEFINES_H 

source1.cpp:

#include "mydefines.h" 
// rest of source file 

source2.cpp:

#include "mydefines.h" 
// rest of source file 

Si può anche specificare la definiscono nella riga di comando del compilatore. Questo può essere poco pratico da gestire per il codice multipiattaforma (che potrebbe richiedere diverse linee di comando per diversi compilatori).

4

Dovresti inserire il tuo #define in un file di intestazione che è quindi #include da entrambi i file cpp.

-1

Come un modo, utilizzando le variabili const extern.

Ad esempio:

file1.h (dove si utilizzerà le definizioni)

extern const int MY_DEF; 

#if (MY_DEF == 1) 
//some another definitions 
#endif 

file2.h (dove si definiscono le definizioni)

const int MY_DEF = 1 

Pro & Con:

(+): è possibile utilizzare alcuni valori per la definisce

(-): Tutte le definizioni devono essere definiti

+0

definendo in file2.h e includendo file2.h in due file di implementazione (. cpp), fornirà l'errore del linker per le definizioni duplicate. –

Problemi correlati