2013-01-11 12 views
7

Myślę, że preprocesor obsługuje pliki jeden po drugim i nie mogę wymyślić, jak to zrobić z włączeniami, więc myślę, że to niemożliwe, ale byłoby świetnie usłyszeć myśli innych.Czy można użyć #define z innego pliku cpp?

mam w a.cpp:

#define A 1 

i chcę go używać z 2.cpp.

EDYTOWANIE: Nie mogę zmodyfikować pierwszego pliku. Na razie po prostu skopiowałem definicje. Ale pytanie wciąż się otwiera.

Odpowiedz

16

Definicje wewnątrz pliku źródłowego nie są widoczne w innych jednostkach tłumaczeniowych. Pliki implementacyjne są kompilowane osobno.

Można

  • umieścić je w nagłówku i to ona
  • użyć opcji kompilatora za
  • zrobić to w rozsądny sposób - const int A = 1; w pliku implementacji i zadeklarować, kiedy chcesz używać to extern const int A;.

Spośród nich, powiedziałbym, że pierwsza opcja jest prawdopodobnie najgorsza z których można korzystać.

+0

na razie opcja z externem wydaje się najbardziej rozsądnym i mniej inwazyjnym sposobem na rozwiązanie tego problemu, +1 – Yola

+2

Muszę zająć się ogólnikowym stwierdzeniem, że włączenie #define w nagłówku to najgorszy sposób na zrobienie tego! Nie chcę być wszystkim Daily WTF "No cóż, jeśli jesteś w środowisku osadzonym bez systemu plików blah blah" o tym, ale są zdecydowanie sytuacje, w których #define jest znacznie lepsze niż const int. – Vicky

+0

Pod względem zależności plików i opcji sprzęgania 1 i 3 wydają się być równoważne. Czy coś mi umyka? – CpILL

7

Jeśli chcesz udostępnić definicję między dwoma plikami źródłowymi, przenieś ją do pliku nagłówkowego i dołącz ten nagłówek z obu plików źródłowych.

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 

Można też określić określić w wierszu poleceń kompilatora. Może to być jednak przydatne dla kodu wieloplatformowego (który może wymagać różnych wierszy poleceń dla różnych kompilatorów).

4

Musisz umieścić swój plik w pliku nagłówkowym, który jest następnie #include d przez oba pliki cpp.

-1

Sposób - użycie zmiennych stałych extern.

Na przykład:

file1.h (gdzie można korzystać z definicji)

extern const int MY_DEF; 

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

plik2.h (gdzie można zdefiniować definicje)

const int MY_DEF = 1 

Pro & Con:

(+): można korzystać z niektórych wartości Definiuje

(-): Wszystkie definicje muszą być zdefiniowane

+0

definiowanie w file2.h i dołączanie file2.h do dwóch plików implementacyjnych (. cpp), spowoduje błąd linkera dla zduplikowanych definicji. –

Powiązane problemy