Скажімо, я хочу мати кілька типів вихідних повідомлень у своєму коді. Один з них - це 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)
, що тестує стан потоку теж.