2010-05-05 17 views
20

मैं सोच रहा था कि क्यों कुछ स्रोत कोड में एफएआर और पास्कल जैसे मैक्रोज़ हैं। उनका क्या मतलब है और क्या करते हैं? धन्यवादफायर पास्कल क्या है?

+10

वे एक टाइम मशीन का आह्वान करते हैं, और फिर 30 वर्षीय बिल गेट्स बाहर निकलते हैं और 640k की मांग करते हैं। –

उत्तर

19
  • पास्कल: यह एक calling convention से संबंधित है। पैरामीटर को बाएं से दाएं क्रम (सीडीसीएल के विपरीत) में ढेर पर धकेल दिया जाता है, और कैली वापस लौटने से पहले ढेर को संतुलित करने के लिए जिम्मेदार होता है।

    यह कॉलिंग सम्मेलन निम्नलिखित 16 बिट एपीआई में सामान्य था: ओएस/2 1.x और माइक्रोसॉफ्ट विंडोज 3.x. वहाँ पर कि क्या यह Borland डेल्फी 1.x से

  • सुदूर इस्तेमाल किया गया था पर कुछ विवाद है: एक खंडित वास्तुकला कंप्यूटर में, एक far pointer एक सूचक जो एक खंड चयनकर्ता भी शामिल है, वर्तमान सेगमेंट के बाहर यह पतों को इंगित करने के लिए संभव बना रही है ।

पूर्णता के लिए, सुदूर और पास्कल prepreocessor मैक्रो है कि, जब 16-बिट सिस्टम के लिए संकलित, उन कीवर्ड को बुला सम्मेलन और सूचक आकार घोषित करने के लिए आवश्यक थे करने के लिए विस्तार कर रहे हैं। 32-बिट सिस्टम पर, वे आम तौर पर कुछ भी नहीं बढ़ाते हैं (जब तक कि आपके पास अजीब डिफ़ॉल्ट कॉलिंग सम्मेलन न हो)। {: Adrian McCarthy से टिप्पणी टोपी/टिप}

+0

मुझे पूरा यकीन है कि डिफ़ॉल्ट डेल्फी कॉलिंग सम्मेलन हमेशा * रजिस्टर * रहा है। यह विंडोज एपीआई और अन्य डीएलएल से कार्यों के लिए केवल * पास्कल * का उपयोग किया जाता है। –

+3

पूर्णता के लिए, 'एफएआर' और 'पास्कल' प्रीप्रोसेसर मैक्रोज़ हैं, जो 16-बिट सिस्टम के लिए संकलित किए जाने पर, कॉलिंग कन्वेंशन और पॉइंटर आकार घोषित करने के लिए आवश्यक कीवर्ड में विस्तारित होते हैं। 32-बिट सिस्टम पर, वे आम तौर पर कुछ भी नहीं बढ़ाते हैं (जब तक कि आपके पास अजीब डिफ़ॉल्ट कॉलिंग सम्मेलन न हो)। मैक्रोज़ पिछड़े संगतता के लिए बनाए रखा जाता है। –

3

FAR 16-बिट युग, जब हम पास था (16-बिट) और अब तक (32-बिट) संकेत से एक पकड़ मिली है।

PASCAL एक कॉलिंग सम्मेलन है। मेरा मानना ​​है कि यह आजकल stdcall के बराबर है।

9

, स्मृति यहाँ से जा रहे हैं

सुदूर गिरावट वापस 16 बिट दिनों के लिए है जब ढेर स्मृति के आधार पर विभाजित किया गया था। निकट डेटा आकार और तेज़ में सीमित था, एफएआर को बड़ा होने की अनुमति थी लेकिन अधिक महंगी थी।

मेरे ज्ञान का सबसे अच्छा, 32-बिट भूमि में यह एक मैक्रो है जो कुछ भी नहीं गिरता है।

पास्कल एक कॉलिंग सम्मेलन भी 16-बिट दिनों में भारी रूप से उपयोग किया जाता है। तब से इसे stdcall द्वारा प्रतिस्थापित किया गया है।

दोनों पिछड़े संगतता के लिए बाएं हैं।

1

यह शायद है कुछ बेमानी/अप्रचलित कोडन 16bit युग से बचे मैक्रो पिछली संगतता के लिए रखे जाते हैं।

16 बिट अनुप्रयोगों में एफएआर का उपयोग यह संकेत करने के लिए किया गया था कि पते को 16 बिट से अधिक की आवश्यकता है।

पास्कल (एल्शन) एक रूपांतरण प्रकार है, यह संकलक को पता चलता है कि स्टैक की व्यवस्था कैसे की जाती है (PASCAL कॉलिंग सम्मेलनों का उपयोग करके) ताकि संकलक फ़ंक्शन से और उसके लिए उचित पैरामीटर पास कर सके।

HTH

2

यह कोई पुराना बुला सम्मेलन है ...

सुदूर एक समय से विरासत में मिली है जब प्रोसेसर रजिस्टरों जहां एक कूद गंतव्य के पूरे पते धारण करने के लिए बहुत छोटा है। इसलिए, प्रोसेसर के पास 2 प्रकार की कूद थी, इस पर निर्भर करता है कि गंतव्य कार्यक्रम कार्यक्रम से "दूर" गंतव्य कैसे था।

PASCAL स्टैक पर तर्क आदेश का वर्णन करता है, यह बताता है कि फ़ंक्शन पास्कल प्रोग्रामिंग भाषा द्वारा वर्णित क्रम का उपयोग करता है, जो सी से अलग था (मैकोज़ और विंडोज़ जैसे ऑपरेटिंग सिस्टम का बहुत पुराना संस्करण जहां पास्कल का उपयोग करके विकसित किया गया था) ।

6

एफएआर अप्रचलित है; इसका उपयोग 16-बिट कोड में पॉइंटर्स को इंगित करने के लिए किया गया था जो वर्तमान सेगमेंट में केवल 16-बिट ऑफसेट की बजाय पूरे पता स्थान को संबोधित कर सकता था।

पास्कल एक कॉलिंग सम्मेलन है। Wikipedia यह वर्णन के रूप में:

मापदंडों बाएँ से सही क्रम (cdecl के विपरीत) में ढेर पर धकेल दिया जाता है, और कॉल प्राप्त करने वाला वापसी से पहले ढेर संतुलन के लिए जिम्मेदार है।

यह कॉलिंग सम्मेलन निम्नलिखित 16 बिट एपीआई में सामान्य था: ओएस/2 1.x, माइक्रोसॉफ्ट विंडोज 3.x, और बोर्लैंड डेल्फी संस्करण 1.x।

+0

मार्क, मैं सी ++ में नया हूं और कुछ पुराने सी/सी ++ कोड को सी ++ 11 में बदलने के लिए कहा गया है। डेटा प्रकार 'लघु FAR *' को भारी रूप से अपनाया जाता है और वीएस2013 में हल नहीं होगा - क्या मुझे उन्हें बदलना चाहिए, यदि ऐसा है तो क्या? – MoonKnight

+0

@ किलरकैम आप जहां भी उन्हें पाते हैं वहां 'FAR' और 'NEAR' ड्रॉप करने में सक्षम होना चाहिए। हालांकि मुझे आश्चर्य है कि वे माइक्रोसॉफ्ट हेडर द्वारा रिक्त मैक्रोज़ के रूप में पहले से ही परिभाषित नहीं हैं, वे पिछड़े संगतता के राजा हैं। –

1

विशेष रूप पास्कल कहते समारोह सही क्रम के लिए छोड़ दिया में पारित कर रहे हैं करने के लिए तर्क, इस कोड का आकार कम कर देता है (क्योंकि फोन करने वाले जानता है कि कैसे बड़े ढेर है और इसलिए यह साफ कर सकते हैं)

सी stdcall दाएं से दाएं तर्क पास करता है, इसका मतलब है कि आप तर्कों की एक चर संख्या हो सकती है, लेकिन साफ़ करने के लिए अधिक कोड की आवश्यकता है।

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