Я полагаю, что этот вариант темы дает категории отладки без необходимости иметь отдельное имя макроса для каждой категории.
Я использовал этот вариант в проекте 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");
...