В программе MSVC C ++ у меня есть часть кода, которую я хочу включить или отключить в зависимости от определения препроцессора
// 1.h
#ifdef MYOPTION
//...
#endif
Но я считаю, что это довольно опасно, когда он используется в файле .h, включенном в несколько модулей компиляции, поскольку я могу легко получить непоследовательные заголовки (я не хочу определять MYOPTION глобально, так как это потребует полная перекомпиляция каждый раз, когда я меняю ее):
// 1.cpp
#define MYOPTION
#include "1.h"
// 2.cpp
#include "1.h"
Конечно, это намного сложнее, чем этот упрощенный пример, из-за включения цепочечного заголовка.
Есть ли способ избежать такого несоответствия, например, ли ошибка времени компиляции без особых усилий?
Я думал о том, чтобы сделать #define MYOPTION 0
или 1
, но тогда мне пришлось бы написать что-то вроде
#if MYOPTION == 1
//...
#elif !defined(MYOPTION)
#error ...
#endif
что выглядит слишком сложно ... Может быть, есть лучший вариант?