Powiedzmy, że chcę mieć w kodzie kilka typów komunikatów wyjściowych. Jednym z nich jest DEBUG
, który jest drukowany tylko wtedy, gdy kod jest kompilowany w trybie debugowania.
Zwykle musiałbym napisać coś takiego
#ifdef DEBUG
std::cout << "Debug message" << std::endl;
#endif
co jest dość kłopotliwe i denerwujące w użyciu w wielu miejscach.
Czy dobrą praktyką jest definiowanie makra dla fragmentu kodu, abyś mógł z niego korzystać w ten sposób?
MSG_DEBUG("Debug message")
A może istnieje inny, bardziej elegancki sposób radzenia sobie z tym bez makr? Interesują mnie możliwe rozwiązania zarówno w C, jak i C ++, ponieważ używam obu języków w różnych projektach.
constexpr if
na przykład w C ++.
STDERR
. Ponadto, dlaczego nie zrobić to zależy NDEBUG
jak assert()
robi zamiast? Następnie możesz zdefiniować go tak #define DEBUG_MSG(MSG) assert(std::cerr << MSG)
, który testuje również stan strumienia.