डीबगबिल्ड के लिए, मैं आमतौर पर क्लैंग का उपयोग करता हूं, क्योंकि यह चेतावनियों और त्रुटियों को बेहतर बनाता है, और उन्हें ट्रैक करने के लिए थोड़ा आसान बनाता है, और उन्हें ठीक करता है।वैराडिक मैक्रोज़ गैर मानक हैं?
लेकिन हाल ही में variadic तर्क के साथ एक मैक्रो को जोड़ने के बाद, बजना मुझे बताया (एक डमी परियोजना से) के बाद:
main.cpp:5:20: warning: named variadic macros are a GNU extension [-Wvariadic-macros]
#define stuff3(args...) stuff_i(args)
मुझे पता है कि macroname(args...)
compilers की एक विस्तृत श्रृंखला, VisualStudio, Sunstudio सहित ठीक संकलित , और निश्चित रूप से जीसीसी।
संख्या 1:
#define stuff1(...) stuff_i(...)
संख्या 2: लेकिन सिर्फ यकीन है कि बजना सही है बनाने के लिए, मैं variadic तर्क के विस्तार की दो अन्य तरीकों की कोशिश की
#define stuff2(...) stuff_i(__VA_ARGS__)
दोनों पर मैं इस प्राप्त संदेश:
main.cpp:3:16: warning: variadic macros were introduced in C99 [-Wvariadic-macros]
... जो मुझे आश्चर्यचकित करता है कि क्या वैराडिक मैक्रोज़ वास्तव में सी ++ के मानक का हिस्सा हैं (ए निश्चित रूप से मुझे पता है कि प्रीप्रोसेसर का स्वतंत्र रूप से व्याख्या किया जाता है)?
C99 और C++ 0x आधिकारिक तौर पर संस्करण 2 सी ++ 03 का समर्थन किसी भी variadic मैक्रो का समर्थन नहीं करता:
यहाँ C++ एक मानक अनुरूप variadic मैक्रो परिभाषा का एक उदाहरण है।संस्करण 1 जीसीसी-विशिष्ट एक्सटेंशन – sellibitze
(आपके नाम की तरह) है जब आप जीसीसी के साथ संकलित करते हैं तो '-pedantic' विकल्प होता है जिसे उपयोग किए गए एक्सटेंशन की रिपोर्ट करनी चाहिए। उदाहरण के लिए वैरिएबल लम्बाई ऐरे या वैराडिक मैक्रोज़ की तरह। जीसीसी में उन्हें केवल इसलिए शामिल किया जाता है क्योंकि चूंकि वे सी 99 का हिस्सा हैं, इसलिए तर्क पहले ही लागू हो चुका है, इसलिए सी ++ लोक लाभ को छोड़ना अच्छा विचार होना चाहिए :) –
@ मैथ्यूयू एम: हां वास्तव में, मैंने यह भी सोचा कि यह सुविधा सी ++ का हिस्सा होगा, क्योंकि यह पहले से ही सी 99 का हिस्सा है ... दिलचस्प बात यह है कि जीसीसी यह नहीं कहता है कि नामित वैराडिक मैक्रोज़ वास्तव में एक जीएनयू एक्सटेंशन हैं, लेकिन इसके बजाय सिर्फ यह कहता है कि वे मानक का हिस्सा नहीं हैं: 'चेतावनी: आईएसओ सी नामित वैराडिक मैक्रोज़ –