यह सी में आम बात का उपयोग कर रहा है के लिए:मैक्रोज़ में "do {...} जबकि (0)" और "{...} ((शून्य) 0)" के बीच व्यावहारिक अंतर?
#define FOO() do { /* body */ } while (0)
हालांकि यह ठीक है, यह भी संभव है करने के लिए:
#define FOO() { /* body */ }((void)0)
{...}((void)0)
वही लाभ के कई हैं: आप नहीं कर सकते गलती से तर्क विलय करें, और ;
लाइन के अंत में आवश्यक है, इसलिए इस तरह के अजीब अभिव्यक्ति अन-ध्यान से नहीं जाते: FOO() else {...}
।
केवल अंतर मैंने देखा है इसका मतलब है कि आपको if-statement में ब्रेसिज़ का उपयोग करने की आवश्यकता है।
if (a) {
FOO();
} else {
BAR();
}
अन्य तो यह मोड़, यह अच्छी तरह से काम करने के लिए, समस्याओं do/while
प्रक्रिया आम तौर पर के लिए प्रयोग किया जाता है एक ही प्रकार को रोकने लगता है:
if (a)
FOO();
else
BAR();
के रूप में लिखा जाना चाहिए।
क्या 2 विधियों के बीच कोई महत्वपूर्ण अंतर है?
ने कहा अलग ढंग से, यदि आप एक कोड आधार {...}((void)0)
का उपयोग कर, do{..}while(0)
उपयोग पर स्विच करना व्यावहारिक कारण हैं, एक अंतर के अलावा देखने के पहले ही उल्लेख किया?
'{...} (शून्य) 0' संस्करण का प्रयोग कभी भी अभ्यास में नहीं किया जाता है - मैंने इसे पहले कभी भी नहीं देखा है। यह सादा _weird_ है! और व्यर्थ।और बेकार, क्योंकि आप इसे 'do {...} जबकि (0)' विकल्प के रूप में उपयोग नहीं कर सकते हैं। '(शून्य) 0' कास्ट आपको मूल्य के कुछ भी नहीं खरीदता है - यह लाभ से रहित है। –
प्रैक्टिकल फर्क # 1: लोग जानते हैं और पहचान करते हैं '{{}} (0)' variant, और दूसरा नहीं। –
आपके द्वारा इंगित अंतर बहुत बड़ा है। –