#define макрос для отладочной печати в C? - PullRequest
192 голосов
/ 29 октября 2009

Попытка создать макрос, который можно использовать для отладочных сообщений печати, когда определен DEBUG, например, следующий псевдокод:

#define DEBUG 1
#define debug_print(args ...) if (DEBUG) fprintf(stderr, args)

Как это достигается с помощью макроса?

Ответы [ 12 ]

1 голос
/ 05 октября 2014

Вот что я использую:

#if DBG
#include <stdio.h>
#define DBGPRINT printf
#else
#define DBGPRINT(...) /**/  
#endif

Приятно правильно обрабатывать printf даже без дополнительных аргументов. В случае DBG == 0 даже самому глупому компилятору нечего жевать, поэтому код не генерируется.

0 голосов
/ 05 апреля 2017

Я полагаю, что этот вариант темы дает категории отладки без необходимости иметь отдельное имя макроса для каждой категории.

Я использовал этот вариант в проекте Arduino, где пространство программы ограничено 32 КБ, а динамическая память ограничена 2 КБ. Добавление операторов отладки и строк отладки трассировки быстро занимает место. Поэтому важно иметь возможность ограничить трассировку отладки, включенную во время компиляции, до минимума, необходимого при каждой сборке кода.

debug.h

#ifndef DEBUG_H
#define DEBUG_H

#define PRINT(DEBUG_CATEGORY, VALUE)  do { if (DEBUG_CATEGORY & DEBUG_MASK) Serial.print(VALUE);} while (0);

#endif

вызов файла .cpp

#define DEBUG_MASK 0x06
#include "Debug.h"

...
PRINT(4, "Time out error,\t");
...
...