प्रीप्रोसेसर काम करता है कि मेरा मानसिक मॉडल स्पष्ट रूप से अपूर्ण है, और यह मुझे पागल कर रहा है।प्रीप्रोसेसर टोकन विस्तार
मैं दो टोकन को जोड़ना चाहता हूं, लेकिन दूसरा टोकन पहले विस्तारित किया जाना चाहिए।
#define ANSWER 42
#define FOO foo_ ## ANSWER
यहाँ, FOO
foo_ANSWER
के लिए विस्तारित, लेकिन मैं इसे foo_42
होना चाहता हूँ। इसलिए मैं उम्मीद है कि इस किसी भी तरह संयोजन से पहले बहस का विस्तार होगा में एक MERGE
मैक्रो निर्धारित:
#define MERGE(x, y) x ## y
#define BAR MERGE(bar_, ANSWER)
लेकिन BAR
अभी भी bar_ANSWER
बजाय bar_42
विस्तारित होती है। तो मैं एक और मैक्रो HELPER
को परिभाषित:
#define HELPER(x, y) MERGE(x, y)
#define BAZ HELPER(baz_, ANSWER)
और अब BAZ
सफलतापूर्वक baz_42
करने के लिए विस्तारित किया गया है। फिलहाल, यह मेरे लिए जादू की तरह लगता है।
क्या कोई मुझे इस व्यवहार को समझा सकता है? विस्तार नियम वास्तव में कैसे काम करते हैं?
मुझे खेद है कि मैं इस मुद्दे के संभावित डुप्लिकेट प्रश्न भी बनाउंगा। मुझे आश्चर्य है कि यह व्यवहार स्पष्ट रूप से क्यों दस्तावेज नहीं किया गया है। मेरा मतलब है कि प्रीप्रोसेसर संचालित एल्गोरिदम। –
@ सांडुन्धमिका: इसकी सुंदरता स्पष्ट रूप से spec-section 6.10.3 में प्रलेखित है - हालांकि कई अपरिभाषित व्यवहार कोनों हैं। –