У меня есть серия отладочных макросов, которые могут расширяться либо как вызовы функций, либо как операторы без операций. глобальные макросы, которые можно включать и выключать с помощью дополнительного #define. Я хочу сделать это на макроуровне, потому что я нахожусь в среде с чрезвычайно ограниченным размером кода.
Я знаю, что это незаконно, но надеюсь, что это показывает то, чего я надеюсь достичь:
#define MODULE_DEBUG(MNAME) \\
#ifdef ##MNAME_DEBUG \\
#define ##MNAME_DEBUG_LOG DEBUG_LOG \\
#define ##MNAME_DEBUG_LOG_HEX DEBUG_LOG_HEX \\
#else \\
#define ##MNAME_DEBUG_LOG NOOP \\
#define ##MNAME_DEBUG_LOG_HEX NOOP \\
#endif
В качестве примера использования это вызовет log ("foo"). Но это было бы N OOP, если бы DEBUG не был установлен или если BLE_DEBUG не был установлен.
#define DEBUG
#define BLE_DEBUG
MODULE_DEBUG(BLE);
BLE_DEBUG_LOG("foo");