संभव डुप्लिकेट:
Do-While and if-else statements in C/C++ macrosजब हम मैक्रो को परिभाषित करते हैं तो 0 (0) का क्या उपयोग होता है?
मैं लिनक्स कर्नेल पढ़ रहा हूँ और मैं इस तरह कई मैक्रो पाया:
#define INIT_LIST_HEAD(ptr) do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
क्यों वे परिभाषित के बजाय इस का उपयोग करते हैं यह बस एक {} में?
लेकिन ओ पी के सवाल खड़ा है। क्यों {{ptr) -> अगला ...} करने के बजाय {{ptr) -> अगला ...} जबकि (0) ;? –
अरनो ने समझाया। यह "{(पीआरटी) -> अगला ...} तक विस्तारित होगा;" इस प्रकार, एक बयान के बाद एक बयान। अगर वाक्यविन्यास हालांकि "अगर (अभिव्यक्ति) कथन अन्य कथन है"। अन्य किसी भी से जुड़े नहीं होंगे, क्योंकि आपने "अगर (अभिव्यक्ति) कथन कथन" लिखा होगा (एक "{...}" और एक ";" कथन)। –
जैसा कि आमो ने कहा, यह एक चालाक चाल है जो एक मैक्रो को * सी * कथन के लिए अनुमति देता है जो अर्धविराम से समाप्त होना चाहिए। यह मैक्रो अधिनियम को फ़ंक्शन कॉल की तरह बनाता है, जहां तक कथन निर्माण और समाप्ति (';' के साथ) का संबंध है। – Eddie