निम्नलिखित कोड दिया:जीसीसी बनाम दृश्य स्टूडियो मैक्रो विस्तार
void doSomething(int one, int two, int three)
{
}
void doSomethingElse()
{
doSomething(1,2,3);
doSomething(1,2,3);
}
जीसीसी 4.2 निम्नलिखित देता है, जबकि:
void doSomething(int one, int two, int three)
{
//something here
}
#define ONE 1,2,3
#define TWO(arg) doSomething(arg);
#define THREE(arg) TWO(arg)
void doSomethingElse()
{
TWO(ONE)
THREE(ONE)
}
विजुअल स्टूडियो 2010 निम्नलिखित पूर्वप्रक्रमक निर्गम (छोड़ते हुए कुछ रिक्त लाइनों) है :
void doSomething(int one, int two, int three)
{
}
void doSomethingElse()
{
doSomething(1,2,3);
myFile.cpp:17:13: error: macro "TWO" passed 3 arguments, but takes just 1
TWO
}
मुझे यकीन है कि जो मानक है नहीं कर रहा हूँ, लेकिन मैं इसे दृश्य संवर्धन की तरह काम करना चाहते हैं आईओ काम कर रहा है। क्या कोड को दोबारा करने का कोई तरीका है ताकि यह दोनों कंपाइलरों में इस तरह से काम करे?
आमतौर पर जब वीएस और जीसीसी भिन्न होता है, तो यह सही है। –
यह विज़ुअल सी ++ प्रीप्रोसेसर में एक ज्ञात बग है: यह रीस्कैनिंग से पहले मैक्रोज़ का विस्तार नहीं करता है। जीसीसी का व्यवहार सही है। –
सभी प्रतिक्रियाओं के लिए धन्यवाद ... प्रस्तुत किए गए समाधानों के संदर्भ में, मुझे लगता है कि मैंने अपना उदाहरण बहुत सरल बना दिया और उन्हें काम पर नहीं लाया। मुझे एक और कामकाज मिला लेकिन यह इस सामान्य मुद्दे के लिए चित्रकारी नहीं है, इसलिए मैं इसे यहां छोड़ दूंगा। – user109078