2012-05-30 14 views
5

मैक्रोज़ कहां संग्रहीत हैं?

#define var 10 

तो के रूप में

अगर मैं अपने सी कोड में मैक्रो का उपयोग, इस तरह जहां वास्तव में अंतरिक्ष कर्नेल द्वारा प्रक्रिया के लिए आवंटित में जमा हो जाती? ढेर या बीएसएस या वैश्विक डेटा में? या यह संकलक पास में से एक में var के लिए सिर्फ एक पाठ प्रतिस्थापन है?

उत्तर

14

हां।
पिछले एक

सिर्फ एक पाठ प्रतिस्थापन

यह एक पूर्व प्रसंस्करण पास द्वारा किया जाता है। कुछ अच्छी जानकारी के पाया जा सकता है here#define तरह

+0

मुझे नहीं लगता कि टेक्स्ट प्रतिस्थापन काफी उचित है। यह पैरामीटर सूचियों और इस तरह के साथ काम कर सकते हैं। –

+0

हां। मैक्रोज़ कई चीजों के लिए उपयोगी हैं। ओपी सीपीपी पास के बारे में थोड़ा अस्पष्ट है। पाठ प्रतिस्थापन क्या होता है। – EvilTeach

+0

@AndrewWhite: प्रीप्रोसेसर जटिल है, लेकिन यह अभी भी पाठ रूपांतरण के लिए एक पाठ करता है। उदाहरण के लिए, यूनिक्स सिस्टम में कंप्रेसर से अलग से प्रीप्रोसेसर चलाने के लिए संभव है और आप कुछ गैर-सी फाइलों के लिए सी प्रीप्रोसेसर का भी उपयोग कर सकते हैं। – hugomg

4

प्रीप्रोसेसर निर्देशों संकलन के पूर्व प्रसंस्करण के चरण के दौरान संबंधित पाठ के साथ बदल रहे हैं, और (लगभग) अंतिम निष्पादन में प्रतिनिधित्व कभी नहीं कर रहे हैं।

0

यह कंपाइलर के लिए एक निर्देश है, और इस प्रकार कंपाइलर की प्रोसेस स्पेस में टेबल में संग्रहीत किया जाता है, न कि आपके कोड की जगह।

+0

संकलक इसे कभी नहीं देखता है। प्रीप्रोसेसर पास इसे खाता है। – EvilTeach

3

"मैक्रोज़" एक "संकलित समय की बात" हैं।

यह संकलक से पहले - "पाठ को प्रतिस्थापित करता है" जो संकलक देखता है - इससे पहले।

परिणाम (संकलित कोड में) संचालन का एक सेट हो सकता है ... डेटा घोषणा ... या कुछ भी नहीं।

लेकिन प्रीप्रोसेसर खत्म होने के बाद "मैक्रो" प्राचीन इतिहास है, और संकलन वास्तव में शुरू होने से पहले।

0

मैक्रोज़ केवल टेक्स्ट प्रतिस्थापन हैं। प्रतिस्थापित होने पर, ये कोड का एक हिस्सा बन जाते हैं और इस प्रकार कोड सेगमेंट में संग्रहीत होते हैं।

संबंधित मुद्दे