использование директив препроцессора для общего файла

У меня есть файл .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, чтобы он работал, и этот файл является общим …

Есть идеи?

0

Решение

Я не уверен, какой компилятор вы используете, но в Visual Studio определите «CHECK» в проекте, для которого вы хотите выполнить код:

Настройки проекта> Свойства конфигурации> C / C ++> Препроцессор> Определения препроцессора

2

Другие решения

Независимо от того, что вы делаете, вам понадобится точка решения, где вы будете указывать компилятору, какой код компилировать.

Различные среды разработки предоставляют различные методы для ввода данных в эту точку принятия решения. Это могут быть переменные среды, которые имеют разные значения для разных проектов. Другой способ (более чистый, я бы сказал) состоит в том, чтобы разделить код на 2 разных файла, один из которых будет включен в первый проект, а второй — во второй.

1

Я не думаю, что это возможно.

#ifdef CHECK
...
#endif

Всегда будет выполняться, если определен CHECK. Единственный способ не включать вложенный код в проект — отменить определение CHECK для этого проекта, если он когда-либо был определен.

#undef CHECK

в проекте B

0

Если вы хотите использовать свой подход с использованием #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

Надеюсь, я правильно ответил на вопрос.

0
По вопросам рекламы [email protected]