สมมติว่าฉันต้องการมีข้อความเอาต์พุตหลายประเภทในรหัสของฉัน หนึ่งในนั้นคือDEBUG
ซึ่งจะถูกพิมพ์เท่านั้นเมื่อรวบรวมรหัสในโหมด Debug
โดยปกติฉันจะต้องเขียนบางอย่างเช่น
#ifdef DEBUG
std::cout << "Debug message" << std::endl;
#endif
ซึ่งค่อนข้างยุ่งยากและน่ารำคาญในหลาย ๆ ที่
เป็นวิธีปฏิบัติที่ดีในการกำหนดแมโครสำหรับข้อมูลโค้ดดังนั้นคุณจะใช้วิธีนี้หรือไม่
MSG_DEBUG("Debug message")
หรือมีวิธีอื่นที่สวยงามกว่าวิธีจัดการกับมันโดยไม่มีมาโคร ฉันสนใจโซลูชันที่เป็นไปได้ทั้งใน C และ C ++ เนื่องจากฉันใช้ทั้งสองภาษาในโครงการที่แตกต่างกัน
constexpr if
++ ได้ดีกว่า
STDERR
เช่นกันการวินิจฉัยควรจะไป นอกจากนี้ทำไมไม่ทำให้มันขึ้นอยู่กับNDEBUG
ว่าชอบassert()
แทน? จากนั้นคุณสามารถกำหนดเช่น#define DEBUG_MSG(MSG) assert(std::cerr << MSG)
นี้ซึ่งทดสอบสถานะกระแสด้วย