Страницы

Поиск по вопросам

четверг, 6 декабря 2018 г.

Си. Условные операторы в макроопределении препроцессора. Возможно ли?

Нужно исключить отладочные printf() из программы, применяя константу препроцессора. Обрамлять каждый вызов printf()
#if DEBUG == 1 printf(); #endif
не хочется. Можно ли сделать что-то типа:
#define printf(x,y) (if DEBUG == 1 printf(x,y) endif)
#if внутри макроопределений запрещены. Есть ли альтернатива?


Ответ

Можно определять макрос по разному в зависимости от значения DEBUG
#if DEBUG==1 #define printf_d(...) printf(__VA_ARGS__); #else #define printf_d(...) #endif
Но лучше сделать это немного по другому, проверяя не значение, а факт наличия макроопределения:
#ifdef DEBUG // . . .
Такой подход позволяет включить режим отладки простым указанием имени проверяемого макроса в Make-файле или даже в параметрах команды сборки.

Комментариев нет:

Отправить комментарий