नहीं देता है, मैं एक्स मैक्रो लागू कर रहा हूं, लेकिन मुझे एक साधारण मैक्रो विस्तार के साथ समस्या है। this
आलेख सहित, इस मैक्रो (नीचे देखें) कई मैक्रोज़ उपयोग उदाहरणों में उपयोग किया जाता है। कंपाइलर एक त्रुटि संदेश देता है, लेकिन मैं जीसीसी कंपाइलर के साथ -E
ध्वज का उपयोग कर वैध सी कोड देख सकता हूं।त्रुटि: पेस्टिंग "।" और "लाल" वैध प्रीप्रोकैसिंग टोकन
मैक्रो एक्स-सूची के रूप में परिभाषित किया गया है निम्नलिखित:
#define LIST \
X(red, "red") \
X(blue, "blue") \
X(yellow, "yellow")
और फिर:
#define X(a, b) foo.##a = -1;
LIST;
#undef X
लेकिन जीसीसी दिया निम्न त्रुटियों संदेशों:
lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token
मैं जैसा
ने कहा, मैं -E
का उपयोग कर वैध सी कोड देख सकता हूं जीसीसी पर स्विच:
lixo.c:42:1: error: pasting "." and "red" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "blue" does not give a valid preprocessing token
lixo.c:42:1: error: pasting "." and "yellow" does not give a valid preprocessing token
foo.red = -1; foo.blue = -1; foo.yellow = -1;;
वैध प्रीप्रोकैसिंग टोकन क्या है? क्या कोई इसे समझा सकता है?
(इससे पहले कि आप कहते हैं कि "क्यों नहीं सिर्फ एक या तो प्रारंभ या memset()
?" यह मेरा असली कोड नहीं है।)
धन्यवाद बहुत बहुत
foo.bar
3 टोकन (दो पहचानकर्ता और एक ऑपरेटर) के रूप में पार्स किया जाएगा। – Jackतो इस आलेख में "पेस्टिंग टोकन" अनुभाग है (http://www.cprogramming.com/tutorial/cpreprocessor.html) बस गलत है? – Michael
@ माइकल हाँ, यह गलत है। –