Можно ли использовать #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 в заголовочном файле, который затем #included обоими файлами 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

(-): все определения должны быть определены