У меня есть три тесно связанных приложения, которые построены из одного и того же исходного кода - скажем, APP_A, APP_B и APP_C. APP_C - это расширенный набор APP_B, который, в свою очередь, является расширенным набором APP_A.
До сих пор я использовал определение препроцессора для определения создаваемого приложения, которое работало так:
// File: app_defines.h
#define APP_A 0
#define APP_B 1
#define APP_C 2
Мои параметры сборки IDE затем укажите (например)
#define APPLICATION APP_B
... а в исходном коде у меня будут такие вещи как
#include "app_defines.h"
#if APPLICATION >= APP_B
// extra features for APPB and APP_C
#endif
Однако сегодня утром я выстрелил себе в ногу и потратил много времени, просто пропустив строку #include "app_defines.h" из одного файла. Все скомпилировалось нормально, но приложение зависало с AV при запуске.
Я бы хотел знать, какой лучший способ справиться с этим. Раньше, как правило, это один из немногих случаев, когда я думал, что можно использовать #define (в любом случае, в C ++), но я все еще плохо себя чувствовал, и компилятор не защищал меня.