मान लीजिए कि मैं अपने कोड में कई प्रकार के आउटपुट संदेश रखना चाहता हूं। उनमें से एक है 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)
, जो स्ट्रीम-स्टेट का भी परीक्षण करता है।