जीसीसी की शिकायत करता है, तो मुझे क्या करना इस:क्या मैं अंत में बदले में __VA_ARGS के साथ वैरिएडिक सी प्रीप्रोसेसर मैक्रोज़ परिभाषित कर सकता हूं?
#define M(obj,met, ..., contents) obj##_##met(const void * self, __VA_ARGS__) { \
contents \
}
मुझे देते हुए इन 2 कारणों:
error: missing ')' in macro parameter list
warning: __VA_ARGS__ can only appear in the expansion of a C99 variadic macro
जाहिर है, C99 - शैली variadic मैक्रो अंडाकार के बाद समापन कोष्ठक तुरंत उम्मीद करते हैं, प्रभावी ढंग से कि variadic की मांग सूची मैक्रो के अंतिम तर्क हो। मुझे उपरोक्त मैक्रो में वर्णित मेरे शॉर्टेंड नोटेशन का उत्पादन करने के लिए बीच में रहने की आवश्यकता है। क्या जीसीसी इस सुविधा का समर्थन करता है, एक और (गैर-सी 99) वैरिएडिक मैक्रो शैली का उपयोग कर? क्या मैं इसे किसी और तरीके से अनुकरण कर सकता हूं? मैं अंत में विविधता सूची नहीं चाहता, यह मेरी धारणा को भ्रमित कर देगा। और मैं केवल जीसीसी का उपयोग कर सकता हूं।
* मैं अंत में विविध सूची नहीं चाहता हूं, यह मेरी धारणा को भ्रमित कर देगा। और मैं केवल जीसीसी का उपयोग कर सकता हूं। * आप भाग्य से बाहर हैं। –
[बूस्ट.प्रप्रोसेसर] (http://www.boost.org/doc/libs/1_43_0/libs/preprocessor/doc/index.html) देखें। मैं लगभग निश्चित हूं कि आप इसे कर सकते हैं बशर्ते आप एक अलग तर्क के रूप में 'सामग्री' की पहचान करने की कोशिश करना बंद कर दें - आप चरम तर्कों के अंतिम तर्क की पहचान करने के लिए प्रीप्रोसेसर सामग्री का एक हिस्सा उपयोग करते हैं। परिभाषा निश्चित रूप से थोड़ा अधिक जटिल है। –