У меня есть три тесно связанных приложения, созданных из одного и того же исходного кода, скажем, 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" из одного файла. Все скомпилировалось нормально, но приложение вылетало с АВ при запуске.
Я хотел бы знать, как лучше всего справиться с этим. Раньше это обычно было одним из немногих случаев, когда я считал, что #define можно использовать (во всяком случае, в C++), но я все еще сильно ошибался, и компилятор не защитил меня.