Katakanlah saya ingin memiliki beberapa jenis pesan keluaran dalam kode saya. Salah satunya adalah DEBUG
, yang dicetak saja, ketika kode dikompilasi dalam mode Debug.
Biasanya saya harus menulis sesuatu seperti
#ifdef DEBUG
std::cout << "Debug message" << std::endl;
#endif
yang cukup rumit dan menjengkelkan untuk digunakan di banyak tempat.
Apakah ini praktik yang baik untuk mendefinisikan makro untuk cuplikan kode, jadi Anda akan menggunakannya dengan cara ini?
MSG_DEBUG("Debug message")
Atau ada cara lain yang lebih elegan untuk menghadapinya tanpa makro? Saya tertarik tentang solusi yang mungkin baik dalam C dan C ++, karena saya menggunakan kedua bahasa dalam proyek yang berbeda.
constexpr if
di C ++, misalnya.
STDERR
. Juga, mengapa tidak membuatnya bergantung NDEBUG
seperti assert()
tidak? Kemudian Anda bisa mendefinisikannya seperti #define DEBUG_MSG(MSG) assert(std::cerr << MSG)
, yang menguji kondisi aliran juga.