Макрос печати отладки в C?

в C, что надлежащий путь состоит в том, чтобы определить printf как макрос, который распечатает только, когда Отладочный символ будет определен?

#ifdef DEBUG
#define DEBUG_PRINT(???) ???
#else
#define DEBUG_PRINT(???) ???
#endif

где??? то, где я не уверен, что заполнить

28
задан jww 25 February 2019 в 05:15
поделиться

3 ответа

Я довольно часто встречал эту идиому:

#ifdef DEBUG
# define DEBUG_PRINT(x) printf x
#else
# define DEBUG_PRINT(x) do {} while (0)
#endif

Используйте ее как:

DEBUG_PRINT(("var1: %d; var2: %d; str: %s\n", var1, var2, str));

Дополнительные круглые скобки необходимы, потому что некоторые старые компиляторы C не поддерживают var-args в макросах .

39
ответ дан 28 November 2019 в 02:21
поделиться
#ifdef DEBUG
#define DEBUG_PRINT(...) do{ fprintf( stderr, __VA_ARGS__ ); } while( false )
#else
#define DEBUG_PRINT(...) do{ } while ( false )
#endif
22
ответ дан 28 November 2019 в 02:21
поделиться

Что-то вроде:

#ifdef DEBUG
#define DEBUG_PRINT(fmt, args...)    fprintf(stderr, fmt, ## args)
#else
#define DEBUG_PRINT(fmt, args...)    /* Don't do anything in release builds */
#endif
17
ответ дан 28 November 2019 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: