मुझे एक वैरैडिक मैक्रो (वर्तमान में 16 तर्क तक सीमित) में तर्कों की संख्या प्राप्त करने के लिए निम्नलिखित कार्यान्वयन मिला है। हालांकि, वीएस -2010 के लिए उत्पादन हमेशा 1
होता है, इससे कोई फर्क नहीं पड़ता कि कितने तर्क पारित किए गए हैं। With GCC, आउटपुट सही है, मुझे इस निष्कर्ष पर पहुंचा कि मैंने एमएसवीसी (10) के लिए कुछ विशिष्ट याद किया होगा।वीसी ++ के साथ यह विविध तर्क तर्क मैक्रो विफल क्यों होता है?
#define PP_NARGS(...) \
_xPP_NARGS_IMPL(__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
#define _xPP_NARGS_IMPL(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,N,...) N
int main(){
int i = PP_NARGS(A,V,C,X,Y,Z);
std::cout << i;
std::cin.get();
return 0;
}
तो सवाल शीर्षक राज्यों के रूप में है, किसी भी मदद की सराहना की जाएगी।
ओमग, यह * काम * करता है! बहुत बढ़िया! क्या आपके पास कोई स्पष्टीकरण है क्यों? – Xeo
मुझे खुशी है कि मैं मदद कर सकता हूं :-) ईमानदारी से, मैं समझा नहीं सकता क्यों (दोह)। जैसा कि मैंने उत्तर में लिखा था, मुझे लगता है कि आपका मैक्रो सी 99 मानक में ठीक है। मैं 'EXPAND' सामान को पूरी तरह से काम के रूप में समझता हूं, और शायद इसमें कोई तकनीकी रूप से दिलचस्प विषय नहीं है ... के अनुसार [यहां] (http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement), यह वीसी के बग-आश व्यवहार जैसा लगता है। –
इस कामकाज के लिए बहुत बहुत धन्यवाद। वीएस 14 सीटीपी 3 में वर्णित अनुसार काम करता है (जहां एक बग, 2008 में एमएस द्वारा स्वीकार किया गया [सीएफ। आईएसई लिंक], अभी भी मौजूद है)। –