मैं कोड के इस बिट (एक कचरा-एकत्र आगे प्रणाली के लिए एक दुभाषिया का हिस्सा है, वास्तव में) है:दबाने सी मैक्रो चर प्रतिस्थापन
#define PRIMITIVE(name) \
do \
{ \
VocabEntry* entry = (VocabEntry*)gc_alloc(sizeof(VocabEntry)); \
entry->code = name; \
entry->name = cstr_to_pstr(#name); \
entry->prev = latest_vocab_entry; \
latest_vocab_entry = entry; \
} \
while (false)
PRIMITIVE(dup);
PRIMITIVE(drop);
PRIMITIVE(swap);
// and a lot more
लेकिन वहाँ एक समस्या है: लाइन में
entry->name = cstr_to_pstr(#name);
name
फ़ील्ड dup
, drop
, swap
, और बाकी के लिए प्रतिस्थापित किया गया है। मैं फ़ील्ड नाम को प्रतिस्थापित नहीं करना चाहता हूं।
तो, मैक्रो तर्क का नाम बदलने के अलावा, इसे हल करने का कोई तरीका है?
एक उत्तर के लिए, कृपया सामान्य रूप से, मैक्रो बॉडी में मैक्रो तर्क नाम के प्रतिस्थापन को दबाने का एक तरीका बताएं। जवाब न दें "बस इसे इस तरह करें" (कृपया)।
* संरचना * फ़ील्ड नाम बदलें? (इससे पहले किसी एक या दूसरे तरीके से पहले नाम बदलना होगा)। – WhozCraig
@ जिमबाल्टर मैं केवल एन विकल्प की पेशकश कर रहा था क्योंकि ओपी ने संभावित समाधानों पर प्रतिबंध लगाया था। पहली बार मैंने यह नहीं देखा है, और हालांकि मैं तर्क का नाम बदलना चाहता हूं * सही * है, यह निश्चित रूप से ऐसा नहीं है। मैं यह भी मानता हूं कि ओपी द्वारा डाउन-वोटिंग जवाब सुनिश्चित करने के लिए अच्छा कदम नहीं है। – WhozCraig
प्रश्न पर वापस जाएँ, चूंकि प्रीप्रोसेसर यह सब कर रहा है, मुझे यह कहने में शर्मिंदा नहीं है कि मैं सीपीपी को "बताना" करने का कोई तरीका नहीं सोच सकता कि इसे * उस चीज़ की एक या अधिक घटनाओं को प्रतिस्थापित नहीं करना चाहिए * के लिए * डिजाइन किया गया है। संक्षेप में, या तो मैक्रो परम का नाम बदला जा सकता है या आइटम को अपराध के साथ प्रतिस्थापित किया जा सकता है। नोट: उन्मूलन भी संभव है, लेकिन * अत्यधिक * निराश (यानी, आप मानक की सीमाओं के साथ स्कर्ट कर सकते हैं, हालांकि अभी भी इसके भीतर रहना है, कुछ इंडिकेशन मैनिपुलेशन के साथ यदि संरचना क्षेत्र संरचना * पहले * संरचना का सदस्य है । – WhozCraig