У меня есть файл .cpp (давайте назовем его check.cpp) со следующей директивой препроцессора:
#ifdef CHECK
// code to execute goes here
#endif
Файл check.cpp используется в двух разных проектах. (Проекты находятся в одной папке и используют один и тот же файл check.cpp, который также находится в той же папке)
Я хочу, чтобы один проект выполнил этот код, а другой — не выполнил этот код.
В итоге для ProjectA check.cpp будет иметь:
#ifdef CHECK
// This code WILL execute
#endif
А для ProjectB check.cpp будет иметь:
#ifdef CHECK
// This code WILL NOT execute
#endif
Возможно ли это с помощью директив препроцессора, или, может быть, есть более простой способ?
Моя идея заключалась в использовании
#define CHECK 1
И поместите это в один из проектов, а не в другой, но файл .cpp должен включать #define, чтобы он работал, и этот файл является общим …
Есть идеи?
Я не уверен, какой компилятор вы используете, но в Visual Studio определите «CHECK» в проекте, для которого вы хотите выполнить код:
Настройки проекта> Свойства конфигурации> C / C ++> Препроцессор> Определения препроцессора
Независимо от того, что вы делаете, вам понадобится точка решения, где вы будете указывать компилятору, какой код компилировать.
Различные среды разработки предоставляют различные методы для ввода данных в эту точку принятия решения. Это могут быть переменные среды, которые имеют разные значения для разных проектов. Другой способ (более чистый, я бы сказал) состоит в том, чтобы разделить код на 2 разных файла, один из которых будет включен в первый проект, а второй — во второй.
Я не думаю, что это возможно.
#ifdef CHECK
...
#endif
Всегда будет выполняться, если определен CHECK. Единственный способ не включать вложенный код в проект — отменить определение CHECK для этого проекта, если он когда-либо был определен.
#undef CHECK
в проекте B
Если вы хотите использовать свой подход с использованием #defines, я бы предложил следующий подход:
#ifdef FOO
#define BAR(x) f(x)
#undef FOO
#else
#define BAR(x) g(x)
#endif
И в ProjectA.cpp:
#define FOO
#include "header.h"
void a(int x) {
BAR(x); // f(x)
}
В ProjectB.cpp
#undef FOO
#include "header.h"void b(int x) {
BAR(x); // g(x)
}
Это вызовет две версии разных функций, но ваш код может остаться в одном файле common.cpp. Так в g(x)
Вы можете запустить код, специфичный для ProjectB.cpp
И в f(x)
Вы можете запустить код, специфичный для ProjectA.cpp
Надеюсь, я правильно ответил на вопрос.