Я пишу код, используя настраиваемый компилятор gcc, который поддерживает подмножество C99. Используя параметры компилятора, я определил такой макрос:
ENABLE_LOGGING=true
Я использую его в своем коде следующим образом:
#if ENABLE_LOGGING
#define LOG(foo) { log(foo); }
#else
#define LOG(foo)
#endif
Просто оказалось, что это не работает надежно. Иногда используется код, содержащий LOG
, иногда используется emtpy LOG
(тот же проект, те же настройки компилятора).
При изменении аргумента макроса на:
ENABLE_LOGGING=1
все работает.
Я понимаю, что true
может быть неизвестен препроцессору. Но тогда почему это работает в большинстве случаев? И почему я не получаю предупреждений или ошибок во время компиляции модулей, где это не работает?
ENABLE_LOGGING=true
не является допустимым объявлением макроса C. Вы имели в виду#define ENABLE_LOGGING true
или что-то другое? - person Lundin   schedule 09.08.2016