अनुशंसित, 2020

संपादक की पसंद

C ++ में इनलाइन और मैक्रो के बीच अंतर

मैक्रो एक निर्देश है जो इसके आह्वान के समय फैलता है। कार्य को मैक्रोज़ की तरह भी परिभाषित किया जा सकता है। इसी प्रकार, इनलाइन कार्य भी अपने आह्वान के बिंदु पर विस्तार करते हैं। इनलाइन और मैक्रो फ़ंक्शन के बीच एक प्राथमिक अंतर यह है कि इनलाइन फ़ंक्शन को संकलन के दौरान विस्तारित किया जाता है, और मैक्रो को विस्तारित किया जाता है जब प्रोग्राम को प्रीप्रोसेसर द्वारा संसाधित किया जाता है

आइए तुलना चार्ट की मदद से इनलाइन और मैक्रो के बीच के अंतर का अध्ययन करें।

तुलना चार्ट

तुलना के लिए आधारपंक्ति मेंमैक्रो
बुनियादीइनलाइन फ़ंक्शन कंपाइलर द्वारा पार्स किए जाते हैं।मैक्रोज़ का विस्तार प्रीप्रोसेसर द्वारा किया जाता है।
वाक्य - विन्यासइनलाइन रिटर्न_टाइप फंक्शनल_नाम (पैरामीटर) {। । । }#define मैक्रो_नाम चार_परिवर्तन
कीवर्ड का इस्तेमाल कियापंक्ति में
#define
परिभाषितइसे कक्षा के अंदर या बाहर परिभाषित किया जा सकता है।यह हमेशा कार्यक्रम की शुरुआत में परिभाषित किया जाता है।
मूल्यांकनयह केवल एक बार तर्क का मूल्यांकन करता है।यह कोड में उपयोग किए जाने वाले तर्क का हर बार मूल्यांकन करता है।
विस्तारकंपाइलर सभी कार्यों को इनलाइन और विस्तारित नहीं कर सकता है।मैक्रों का हमेशा विस्तार होता है।
स्वचालनक्लास के अंदर परिभाषित छोटे फ़ंक्शंस, इनलाइन फ़ंक्शंस पर स्वचालित रूप से किए जाते हैं।मैक्रोज़ को विशेष रूप से परिभाषित किया जाना चाहिए।
एक्सेस करनाइनलाइन सदस्य फ़ंक्शन कक्षा के डेटा सदस्यों तक पहुंच सकता है।मैक्रोज़ कभी भी वर्ग के सदस्य नहीं हो सकते हैं और कक्षा के डेटा सदस्यों तक नहीं पहुँच सकते हैं।
समाप्तिइनलाइन फ़ंक्शन की परिभाषा इनलाइन फ़ंक्शन के अंत में घुंघराले कोष्ठक के साथ समाप्त होती है।मैक्रो की परिभाषा नई लाइन के साथ समाप्त होती है।
डिबगिंगइनलाइन फ़ंक्शन के लिए डीबग करना आसान है क्योंकि संकलन के दौरान त्रुटि की जाँच की जाती है।डीबग करना मैक्रोज़ के लिए मुश्किल हो जाता है क्योंकि संकलन के दौरान त्रुटि की जाँच नहीं होती है।
बाइंडिंगइनलाइन फ़ंक्शन फ़ंक्शन के शरीर में सभी कथनों को बहुत अच्छी तरह से बांधता है और फ़ंक्शन का शरीर घुंघराले कोष्ठक के साथ शुरू और समाप्त होता है।एक मैक्रो बाध्यकारी समस्या का सामना करता है यदि इसमें एक से अधिक कथन हैं, क्योंकि इसमें कोई समाप्ति चिन्ह नहीं है।

इनलाइन की परिभाषा

इनलाइन फ़ंक्शन एक नियमित फ़ंक्शन की तरह दिखता है लेकिन, कीवर्ड " इनलाइन " से पहले है। इनलाइन फ़ंक्शंस छोटी लंबाई के फ़ंक्शंस हैं, जिन्हें इसके आह्वान के बजाय इसके आह्वान के बिंदु पर विस्तारित किया जाता है। आइए इनलाइन फ़ंक्शन को एक उदाहरण से समझते हैं।

 # नामस्थान std का उपयोग करके हटा दें; वर्ग उदाहरण {int a, b; public: इनलाइन void initialize (int x, int y) {a = x; b = y} शून्य प्रदर्शन () {cout << a << "" < 

उपरोक्त कार्यक्रम में, मैंने घोषित किया और परिभाषित किया, फ़ंक्शन आरंभीकरण (), "उदाहरण" कक्षा में इनलाइन फ़ंक्शन के रूप में। आरंभीकरण () फ़ंक्शन के कोड का विस्तार होगा जहां इसे कक्षा के उदाहरण "उदाहरण" द्वारा लागू किया जाता है। फ़ंक्शन का प्रदर्शन (), वर्ग उदाहरण में परिभाषित इनलाइन घोषित नहीं किया गया है, लेकिन इसे इनलाइनर द्वारा इनलाइन माना जा सकता है, जैसा कि C ++ में वर्ग के अंदर परिभाषित फ़ंक्शन को फ़ंक्शन की लंबाई को देखते हुए कंपाइलर द्वारा स्वचालित रूप से इनलाइन बनाया जाता है।

  • इनलाइन फ़ंक्शन, फ़ंक्शन कॉलिंग और रिटर्न के ओवरहेड को कम करता है जो बदले में कार्यक्रम के निष्पादन के समय को कम करता है। इसके अलावा, तर्कों को स्टैक पर धकेल दिया जाता है और फ़ंक्शन को कॉल करने पर रजिस्टरों को सहेज लिया जाता है और फ़ंक्शन लौटने पर रीसेट कर दिया जाता है, जिसमें समय लगता है, इसे इनलाइन फ़ंक्शन से बचा जाता है क्योंकि हर बार स्थानीय चर और औपचारिक पैरामीटर बनाने की कोई आवश्यकता नहीं होती है ।
  • इनलाइन फ़ंक्शन क्लास का सदस्य हो सकता है और क्लास के डेटा सदस्य तक भी पहुंच सकता है।
  • इनलाइन फ़ंक्शन प्रोग्राम के निष्पादन के समय को कम करता है लेकिन, कभी-कभी यदि इनलाइन फ़ंक्शन की लंबाई अधिक होती है, तो डुप्लिकेट कोड के कारण प्रोग्राम का आकार भी बढ़ जाएगा। इसलिए, यह बहुत छोटे कार्यों को इनलाइन करने के लिए एक अच्छा अभ्यास है।
  • इनलाइन फ़ंक्शन के तर्क का केवल एक बार मूल्यांकन किया जाता है।

मैक्रो की परिभाषा

मैक्रो एक "पूर्वप्रक्रमक निर्देश" है। संकलन से पहले, प्रोग्राम को प्रीप्रोसेसर द्वारा जांचा जाता है और जहां कभी प्रोग्राम में मैक्रो का पता चलता है, वह उस मैक्रो को इसकी परिभाषा से बदल देता है। इसलिए, मैक्रो को "टेक्स्ट प्रतिस्थापन" के रूप में माना जाता है। आइए एक उदाहरण के साथ मैक्रो का अध्ययन करें।

 #include #define GREATER (a, b) ((a <b); b: int मुख्य (शून्य) {cout << "10 और 20 का ग्रेटर" << GREATER ("20", "10") है << "\ n"; वापसी 0; } 

उपरोक्त कोड में, मैंने एक मैक्रो फ़ंक्शन GREATER () की घोषणा की, जो दोनों मापदंडों की अधिक से अधिक संख्या की तुलना और पता लगाता है। आप देख सकते हैं कि मैक्रो को समाप्त करने के लिए कोई अर्धविराम नहीं है क्योंकि मैक्रो को केवल नई लाइन द्वारा समाप्त किया जाता है। चूंकि मैक्रो सिर्फ एक पाठ प्रतिस्थापन है, यह मैक्रो के कोड का विस्तार करेगा जहां इसे लागू किया जाता है।

  • मैक्रों को हमेशा बड़े अक्षरों में परिभाषित किया जाता है, ताकि प्रोग्रामर को पढ़ने के दौरान प्रोग्राम के सभी मैक्रोज़ को पहचानने में आसानी हो।
  • मैक्रो कभी भी एक वर्ग का सदस्य कार्य नहीं हो सकता है, न ही यह किसी भी वर्ग के डेटा सदस्यों तक पहुंच सकता है।
  • मैक्रो फ़ंक्शन हर बार अपनी परिभाषा में प्रकट होने वाले तर्क का मूल्यांकन करता है जिसके परिणामस्वरूप अप्रत्याशित परिणाम होता है।
  • मैक्रो एक छोटे आकार का होना चाहिए क्योंकि बड़ा मैक्रोज़ अनावश्यक रूप से कोड के आकार को बढ़ाएगा।

इनलाइन और मैक्रो के बीच महत्वपूर्ण अंतर

  1. इनलाइन और मैक्रो के बीच मूल अंतर यह है कि इनलाइन फ़ंक्शन कंपाइलर द्वारा पार्स किए जाते हैं जबकि, एक प्रोग्राम में मैक्रोज़ को प्रीप्रोसेसर द्वारा विस्तारित किया जाता है।
  2. इनलाइन फ़ंक्शन को परिभाषित करने के लिए उपयोग किया जाने वाला कीवर्ड " इनलाइन " है, जबकि मैक्रो को परिभाषित करने के लिए उपयोग किया जाने वाला कीवर्ड " #define " है।
  3. एक बार जब इनलाइन फ़ंक्शन किसी कक्षा के अंदर विघटित हो जाता है, तो इसे कक्षा के अंदर या कक्षा के बाहर परिभाषित किया जा सकता है। दूसरी ओर, एक मैक्रो हमेशा कार्यक्रम की शुरुआत में परिभाषित किया जाता है।
  4. इनलाइन फ़ंक्शंस में पास किए गए तर्क को केवल एक बार संकलित किया जाता है जबकि, मैक्रो तर्क का मूल्यांकन किया जाता है जब कोड में मैक्रो का उपयोग किया जाता है।
  5. कंपाइलर किसी वर्ग के अंदर परिभाषित सभी कार्यों को इनलाइन और विस्तारित नहीं कर सकता है। दूसरी ओर, मैक्रोज़ हमेशा विस्तारित होते हैं।
  6. इनलाइन कीवर्ड के बिना एक वर्ग के अंदर परिभाषित छोटे फ़ंक्शन स्वचालित रूप से इनलाइन फ़ंक्शन किए जाते हैं। दूसरी ओर, मैक्रो को विशेष रूप से परिभाषित किया जाना चाहिए।
  7. एक फ़ंक्शन जो इनलाइन है वह कक्षा के सदस्यों तक पहुंच सकता है जबकि, एक मैक्रो कभी भी कक्षा के सदस्यों तक नहीं पहुंच सकता है।
  8. इनलाइन फ़ंक्शन को समाप्त करने के लिए एक बंद घुंघराले ब्रेस की आवश्यकता होती है जबकि, एक मैक्रो को एक नई लाइन की शुरुआत के साथ समाप्त किया जाता है।
  9. किसी भी त्रुटि के लिए संकलन के दौरान जाँच करने पर इनलाइन फ़ंक्शन के लिए डीबग करना आसान हो जाता है। दूसरी ओर, संकलन करते समय एक मैक्रो की जाँच नहीं की जाती है, इसलिए मैक्रो को डीबग करना मुश्किल हो जाता है।
  10. एक फ़ंक्शन इनलाइन फ़ंक्शन होने के नाते अपने सदस्यों को एक शुरुआत और बंद घुंघराले ब्रेस के साथ बांधें। दूसरी ओर, मैक्रो में कोई समाप्ति चिन्ह नहीं होता है, इसलिए बाइंडिंग मुश्किल हो जाती है जब मैक्रो में एक स्टेटमेंट अधिक होता है।

निष्कर्ष:

इनलाइन फ़ंक्शन मैक्रो फ़ंक्शन की तुलना में कहीं अधिक ठोस हैं। C ++ भी एक स्थिरांक को परिभाषित करने का एक बेहतर तरीका प्रदान करता है, जो "कॉन्स्ट" कीवर्ड का उपयोग करता है।

Top