Допустим, я хочу, чтобы в моем коде было несколько типов выходных сообщений. Один из них DEBUG
, который печатается, только когда код скомпилирован в режиме отладки.
Обычно я должен был написать что-то вроде
#ifdef DEBUG
std::cout << "Debug message" << std::endl;
#endif
что довольно громоздко и раздражает во многих местах.
Является ли хорошей практикой определение макроса для фрагмента кода, чтобы вы использовали его таким образом?
MSG_DEBUG("Debug message")
Или есть какой-нибудь другой, более изящный способ, как справиться с этим без макросов? Меня интересуют возможные решения как на C, так и на C ++, так как я использую оба языка в разных проектах.
constexpr if
C ++, например.
STDERR
. Кроме того, почему бы не заставить его зависеть от того, NDEBUG
что assert()
делает вместо этого? Затем вы можете определить его как #define DEBUG_MSG(MSG) assert(std::cerr << MSG)
, который также проверяет состояние потока.