Можно ли использовать #define из другого файла cpp?
Я думаю, что препроцессор обрабатывает файлы один за другим, и я не могу понять, как это сделать с includes, поэтому я думаю, что это невозможно, но было бы здорово услышать мысли других.
Я в a.cpp
:
#define A 1
и я хочу использовать его с 2.cpp
.
изменить: Я не могу изменить первый файл. Так что пока я просто скопировал определения. Но вопрос все еще оставался открытым.
4 ответов
определения внутри исходного файла не видны другим единицам перевода. Файлы реализации компилируются отдельно.
Вы можете
- поместите их в заголовок и включите его
- используйте параметры компилятора
- сделайте это разумным способом -
extern const int A = 1;
в файле реализации и объявить его, когда вы хотите использовать егоextern const int A;
.
из них, я бы сказал первый вариант, возможно, худший, что вы можете использовать.
Если вы хотите поделиться определением между двумя исходными файлами, переместите его в файл заголовка и включите этот заголовок из обоих исходных файлов.
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
вы также можете указать define в командной строке компилятора. Это может быть fiddly для поддержания кросс-платформенного кода (который может нуждаться в разных командных строках для разных компиляторов).
вам нужно будет поставить свой #define
в заголовочном файле, который затем #include
d обоими файлами cpp.
как способ-использование extern const переменных.
например:
file1.ч (где вы будете использовать определения)
extern const int MY_DEF;
#if (MY_DEF == 1)
//some another definitions
#endif
file2.h (где вы будете определять определения)
const int MY_DEF = 1
Pro & Con:
(+): вы можете использовать некоторые значения для defines
(-): все определения должны быть определены