संभव डुप्लिकेट:
Do-While and if-else statements in C/C++ macrosसमारोह मैक्रो घुंघराले ब्रेसिज़ की तरह या do..while
gcc (GCC) 4.7.2
c89
हैलो,
मैं निम्नलिखित समारोह की तरह मैक्रो और बस यह सोचकर कि कई लाइनों में उपयोग करते समय पसंदीदा उपयोग क्या है। घुंघराले ब्रेसिज़ का उपयोग करना या ... (0) लूप करना बेहतर है।
आम तौर पर मैं सब कुछ के लिए एक ..... (0) का उपयोग करता हूं। लेकिन मैंने कुछ परियोजनाएं देखी हैं जहां वे घुंघराले ब्रेसिज़ का उपयोग करते हैं, और मुझे यकीन नहीं है कि कौन सा बेहतर होगा।
do..while
#define DSO_ERROR(msg, res_handle_module, mem_pool, size) do { \
char *dso_error = apr_palloc((apr_pool_t*)mem_pool, size); \
apr_dso_error((apr_dso_handle_t*)res_handle_module, (char*)dso_error, (apr_size_t)size); \
LOG_ERR("%s dso error %s", (char*)msg, dso_error); \
goto dso_failure; \
} while(0);
घुंघराले ब्रेसिज़
#define DSO_ERROR(msg, res_handle_module, mem_pool, size) { \
char *dso_error = apr_palloc((apr_pool_t*)mem_pool, size); \
apr_dso_error((apr_dso_handle_t*)res_handle_module, (char*)dso_error, (apr_size_t)size); \
LOG_ERR("%s dso error %s", (char*)msg, dso_error); \
goto dso_failure; \
}
फर्क सिर्फ इतना है कि एक सेमी-कोलन do..while पाश पर और घुंघराले ब्रेसिज़ पर नहीं पूर्व निर्धारित किया जाएगा।
किसी भी सुझाव के लिए बहुत धन्यवाद,
मेरी भलाई, यह बदसूरत कोड है। (कोई अपराध इरादा नहीं है, मैं बस बहुत हैरान हूँ)। – rubenvb
'do {...} के अंत तक अर्धविराम जोड़ना (0)' (0) 'का उपयोग करने के उद्देश्य को हराता है {...} जबकि (0)' पहली जगह में। ब्रेसिज़-केवल संस्करण का नुकसान यह है कि आप 'अगर (कुछ) DSO_ERROR (...) लिख नहीं सकते हैं; अन्य {...} 'क्योंकि अर्धविराम' if' के बाद एक शून्य कथन है और 'else' एक वाक्यविन्यास त्रुटि है। 'Do {...} जबकि (0)' के सही संस्करण के साथ, 'if'/'else' नोटेशन काम करता है जैसा कि आप उम्मीद करेंगे कि मैक्रो वास्तव में एक फ़ंक्शन था। –