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