preprocessor directives c
C ++ में प्रीप्रोसेसर निर्देशों पर एक विस्तृत नज़र।
प्रीप्रोसेसर C ++ की एक अनूठी विशेषता है। C ++ में, हमारे पास एक विशिष्ट कार्यक्रम के लिए संकलन, लिंकिंग और निष्पादन जैसे कदम हैं। वास्तव में, हमारे पास C ++ प्रोग्राम में कई अन्य विशेषताएं हैं, जिन्हें संकलन के लिए कार्यक्रम को पारित करने से पहले संसाधित करने की आवश्यकता है।
इस उद्देश्य के लिए, प्रीप्रोसेसिंग नामक एक विशेष चरण किया जाता है। संकलन प्रक्रिया से पहले प्रीप्रोसेसिंग किया जाता है और विशेष सुविधाओं को प्रीप्रोसेस किया जाता है। नतीजतन, एक विस्तारित C ++ प्रोग्राम प्राप्त किया जाता है और फिर इसे संकलक को पास किया जाता है।
=> स्क्रैच से C ++ जानने के लिए यहाँ जाएँ।
आप क्या सीखेंगे:
- अवलोकन
- फ़ाइल शामिल करने के निर्देश
- मैक्रो परिभाषा निर्देश
- सशर्त संकलन निर्देश
- द # & ## ऑपरेटर्स
- अन्य निर्देश
- पूर्वनिर्धारित मैक्रों
- निष्कर्ष
- अनुशंसित पाठ
अवलोकन
प्रीप्रोसेसिंग के लिए विशेष सुविधाओं को 'प्रीप्रोसेसर निर्देश' नामक इकाई का उपयोग करके पहचाना जाता है। इन प्रीप्रोसेसर निर्देशकों ने संकलक को बताया कि प्रीप्रोसेसर निर्देशों के साथ चिह्नित C ++ प्रोग्राम में कुछ जानकारी संकलन से पहले प्रीप्रोसेस की जानी चाहिए।
ध्यान दें कि C ++ में सभी प्रीप्रोसेसर निर्देश '#' प्रतीक से शुरू होते हैं। जिस समय प्रीप्रोसेसर (कंपाइलर का हिस्सा) # सिंबल का सामना करता है, कंपाइलर को प्रोग्राम पास करने से पहले # सिंबल के बाद की जानकारी प्रीप्रोसेस हो जाती है।
अन्य सी ++ बयानों के विपरीत, प्रीप्रोसेसर निर्देश अर्धविराम के साथ समाप्त नहीं होते हैं।
इस ट्यूटोरियल में, हम C ++ द्वारा समर्थित विभिन्न प्रीप्रोसेसर निर्देशों का पता लगाएंगे।
फ़ाइल शामिल करने के निर्देश
#शामिल
फ़ाइल समावेश निर्देश #include हमें अपने स्रोत कार्यक्रम में अन्य फ़ाइलों को शामिल करने की अनुमति देता है। हम किसी भी हेडर फ़ाइल को शामिल कर सकते हैं जिसमें इन कार्यों का उपयोग करके हमारे कार्यक्रम में विभिन्न पूर्वनिर्धारित कार्यों की परिभाषाएँ हैं। हम निम्नलिखित सिंटैक्स का उपयोग करके अपने प्रोग्राम में हेडर फाइल शामिल कर सकते हैं।
#include
उदाहरण: #शामिल
हमने अपने C ++ प्रोग्राम में इसे पहले ही देख लिया है। हेडर iostream में इनपुट / आउटपुट डेटा स्ट्रीमिंग जैसे cout, cin, आदि के लिए आवश्यक कार्य शामिल हैं।
जैसे-जैसे हमारे कार्यक्रम बड़े होते हैं या कार्यक्षमता जटिल होती जाती है, हम अपने प्रोग्राम को विभिन्न फाइलों में विभाजित करना चाहते हैं या अन्य फाइलों से कार्यक्षमता को आयात कर सकते हैं। इस मामले में, हम उपयोगकर्ता द्वारा परिभाषित फ़ाइलों का उपयोग करते हैं। हमारे कार्यक्रम में उपयोगकर्ता-परिभाषित फ़ाइलों को शामिल करने के लिए हम #include निर्देश के निम्नलिखित सिंटैक्स का उपयोग कर सकते हैं।
#include “filename”
उदाहरण: # जीत 'वेक्टर_इंट.एच'
यह एक उपयोगकर्ता-परिभाषित हेडर फ़ाइल है जिसे हम अपनी कार्यक्षमता का उपयोग करने के लिए अपने प्रोग्राम में शामिल करने का इरादा रखते हैं।
नीचे दिया गया कोड उदाहरण #include निर्देश के उपयोग को दर्शाता है।
कैसे .bin फ़ाइल पढ़ें
#include using namespace std; int main() { cout<<'This is an example demonstrating inclusion directive #include'; }
आउटपुट:
यह एक उदाहरण है जिसमें समावेश का निर्देश # शामिल है।
जैसा कि दिखाया गया है, हमने अपने प्रोग्राम में हेडर की कार्यक्षमता को शामिल करने के लिए #include निर्देश का उपयोग किया है।
मैक्रो परिभाषा निर्देश
# डेफिन
Cde प्रोग्राम में प्रतीकात्मक स्थिरांक या मैक्रोज़ को परिभाषित करने के लिए #define निर्देश का उपयोग किया जाता है।
एक # मुख्य निर्देश का सामान्य रूप है:
#define macro_name replacement code
जब एक प्रीप्रोसेसर प्रोग्राम में मैक्रो का सामना करता है, तो प्रीप्रोसेसर इस मैक्रो को उस कोड के साथ बदल देता है, जो कंपाइलर को कोड पास करने से पहले #define निर्देश का उपयोग करके परिभाषित किया जाता है।
नीचे दिया गया कोड उदाहरण एक प्रतीकात्मक स्थिर RADIUS दिखाता है जिसे #define निर्देश और कार्यक्रम में इसके उपयोग का उपयोग करके परिभाषित किया गया है।
#include #define RADIUS 5 using namespace std; int main() { cout<<'Area of a circle : '<<3.142 * RADIUS * RADIUS; }
आउटपुट:
एक वृत्त का क्षेत्रफल: 78.55
जैसा कि कार्यक्रम में दिखाया गया है, हम अपने कोड में प्रतीकात्मक निरंतर RADIUS का उपयोग कर सकते हैं और इसे #define निर्देश का उपयोग करके इसके लिए परिभाषित मूल्य से बदल दिया जाएगा।
पीसी प्रदर्शन में सुधार करने के लिए सबसे अच्छा सॉफ्टवेयर
हम एक उचित फ़ंक्शन कोड को परिभाषित करने के लिए #define निर्देश का उपयोग कर सकते हैं। ये कार्य आमतौर पर छोटे कार्य होते हैं।
एक उदाहरण नीचे दिया गया है।
#include #define REC_AREA(length, breadth) (length * breadth) using namespace std; int main() { int length = 20, breadth = 5, area; area = REC_AREA(length, breadth); cout << 'Area of a rectangle is: ' << area; return 0; }
आउटपुट:
एक आयत का क्षेत्रफल है: 100
यहां #define निर्देश का उपयोग करते हुए हमने एक फ़ंक्शन REC_AREA को परिभाषित किया है जो दो तर्क लेता है यानी लंबाई और चौड़ाई और एक आयत के क्षेत्र की गणना करता है। मुख्य कार्य में, हम सिर्फ इस मैक्रो का उपयोग करते हैं और आयत के क्षेत्र को प्राप्त करने के लिए इसे दो तर्क देते हैं।
# कुंड
एक कार्यक्रम में मैक्रों आखिरी बार #define निर्देश के साथ परिभाषित किया गया जब तक कि वह #undef निर्देश का उपयोग करके अपरिभाषित नहीं है। एक बार जब प्रोग्राम का सामना #undef से होगा, तो मैक्रो का बाद का उपयोग (#undef द्वारा अपरिभाषित) एक संकलन त्रुटि देगा।
उपरोक्त कार्यक्रम में, यदि हम पूर्णांक घोषणाओं के बाद सिर्फ एक बयान #undef REC_AREA देते हैं, तो कार्यक्रम एक संकलन त्रुटि देगा।
सशर्त संकलन निर्देश
ऊपर बताए गए निर्देशों के अलावा, C ++ निम्नलिखित निर्देश भी प्रदान करता है जिनका उपयोग कोड के सशर्त संकलन के लिए किया जा सकता है। इन निर्देशों का उपयोग C ++ के if-else स्टेटमेंट के समान लाइनों पर किया जा सकता है।
उदाहरण के लिए, हम इन सशर्त निर्देशों का उपयोग करके प्रोग्राम को चालू या बंद करने के लिए DEBUG सेट कर सकते हैं।
C ++ में दिए गए कुछ सशर्त संकलन निर्देशों में शामिल हैं:
- #अगर
- # एलिफ
- #अगर अंत
- #ifdef
- # टिफ़
- #अन्य
नीचे दिया गया कार्यक्रम C ++ प्रोग्राम में सशर्त संकलन निर्देशों का उपयोग दर्शाता है।
#include using namespace std; #define DEBUG #define MAX(a,b) (((a)>(b)) ? a : b) int main () { int i, j; i = 100; j = 50; #ifdef DEBUG cout <<'Trace: Start of main function' << endl; #endif cout <<'The maximum is ' << MAX(i, j) << endl; #undef MAX //cout <<'The maximum is ' << MAX(10,20) << endl; #ifdef DEBUG cout <<'Trace: End of main function' << endl; #endif return 0; }
आउटपुट:
ट्रेस: मुख्य कार्य की शुरुआत
अधिकतम 100 है
ट्रेस: मुख्य कार्य का अंत
उपरोक्त कार्यक्रम में, हम प्रोग्राम के लिए एक DEBUG को परिभाषित करने के लिए #ifdef - #endif निर्देश का उपयोग करते हैं। फिर हमने #undef निर्देश का उपयोग करके मैक्रो फ़ंक्शन MAX को अपरिभाषित किया। सशर्त संकलन निर्देश #ifdef - #endif का निर्माण करता है यदि DEBUG सेट है और यदि यह सेट है, तो यह प्रोग्राम में कुछ संदेशों को प्रिंट करता है।
द # & ## ऑपरेटर्स
# और ## ऑपरेटर दो विशेष ऑपरेटर हैं जो क्रमशः एक टेक्स्ट टोकन को स्ट्रिंग में बदलने और दो टोकन को बदलने के लिए उपयोग किए जाते हैं।
नीचे दिया गया एक उदाहरण इन दोनों ऑपरेटरों को प्रदर्शित करता है।
#include using namespace std; #define MKSTR( x ) #x #define concat(a, b) a ## b int main () { cout <<'MKSTR(Hello World) = '<< MKSTR(Hello World) << endl; int xy = 100; cout <<'concat(x,y) = '< आउटपुट:
MKSTR (हैलो वर्ल्ड) = हैलो वर्ल्ड
concat (x, y) = 100
उपरोक्त कार्यक्रम में, हम MKSTR को एक तर्क x के साथ परिभाषित करते हैं। इसका शरीर #x है। जब हम 'नमस्ते वर्ल्ड' तर्क का उपयोग करके इस MKSTR को प्रिंट करते हैं, तो हम देखते हैं कि #x के कारण, तर्क स्ट्रिंग में परिवर्तित हो जाता है और आउटपुट पर प्रदर्शित होता है।
इसके बाद, हमने एक कॉन्फैट फ़ंक्शन को दो तर्कों और बी के साथ परिभाषित किया है। शरीर में हम एक ## बी निर्दिष्ट करते हैं। अभिव्यक्ति ## बी बराबर होती है। इस प्रकार मुख्य कार्य में जब हम कॉनैट (x, y) कहते हैं, यह वास्तव में xy का मूल्यांकन करता है जो पूर्णांक चर के बराबर है जिसे हमने परिभाषित किया था।
अन्य निर्देश
# शेर
# निर्देश का सामान्य सिंटैक्स है:
#error error_message
जब कंपाइलर #error निर्देश का सामना करता है, तो यह error_message प्रदर्शित करता है और संकलन बंद हो जाता है। तर्क error_message में उद्धरण के साथ या बिना एक या अधिक शब्द हो सकते हैं।
# पंक्ति
यह संकलक को संकलक की आंतरिक रूप से संग्रहीत लाइन संख्या और फ़ाइल नाम को दिए गए लाइन नंबर और फ़ाइल नाम में बदलने के लिए कहता है।
# पंक्ति अंक-अनुक्रम ('फ़ाइल नाम')
अंक_ परिणाम एक पूर्णांक स्थिरांक हो सकता है।
उदाहरण:# 200 200 टेस्ट
उपरोक्त उदाहरण में, आंतरिक रूप से संग्रहीत लाइन संख्या 200 पर सेट की गई है और फ़ाइल नाम को test.c में बदल दिया गया है।
विंडोज 7 पर swf फाइलें कैसे खोलें
# प्रगमा
संकलक को कार्यान्वयन-परिभाषित निर्देश प्रदान करता है। ये निर्देश संकलक और मंच के लिए विशिष्ट हैं। यदि निर्देश मेल नहीं खाता है, तो सिंटैक्स त्रुटि उत्पन्न किए बिना निर्देश को अनदेखा कर दिया जाता है।
पूर्वनिर्धारित मैक्रों
C ++ कई पूर्वनिर्धारित मैक्रो को भी परिभाषित करता है जो प्रोग्रामर द्वारा उपयोग किए जा सकते हैं।
इनमें से कुछ मैक्रोज़ नीचे सारणीबद्ध हैं।
पूर्वनिर्धारित मैक्रो विवरण __FILE__ कार्यक्रम का वर्तमान फ़ाइल नाम संकलित किया जा रहा है __तारीख__ स्रोत कोड के स्रोत महीने / दिन / वर्ष में अनुवाद की तारीख __समय__ समय के रूप में समय: मिनट: दूसरा जिस पर कार्यक्रम संकलित किया गया है __LINE__ संकलित किए जा रहे कार्यक्रम की वर्तमान पंक्ति संख्या __ अधिशेष पूर्णांक निरंतर जो प्रत्येक संकलक संस्करण के लिए परिभाषित किया गया है
निम्न प्रोग्राम एक कार्यक्रम में इन मैक्रोज़ को प्रदर्शित करता है।
#include using namespace std; int main () { cout<<'__LINE__ :' << __LINE__ << endl; cout<<'__FILE__ :' << __FILE__ << endl; cout<<'__DATE__ :' << __DATE__ << endl; cout<<'__TIME__ :' << __TIME__ << endl; cout<<'__cplusplus:'<<__cplusplus< आउटपुट:
__LINE__: 5
__FILE__: prog.cpp
__DATE__: अप्रैल 15 2019
__TIME__: 12: 09: 15
__cplusplus: 201402
ऊपर दिया गया प्रोग्राम आउटपुट ऊपर पूर्वनिर्धारित मैक्रोज़ के स्पष्टीकरण के अनुरूप है और स्व-व्याख्यात्मक है।
निष्कर्ष
इस ट्यूटोरियल में, हमने C ++ द्वारा प्रदान किए गए विभिन्न प्रीप्रोसेसर निर्देशों को उनके उदाहरणों के साथ देखा है। प्रीप्रोसेसर निर्देश हमें कुछ हद तक अधिक कुशल कार्यक्रम और अधिक पठनीय कार्यक्रम लिखने में मदद करते हैं।
सशर्त संकलन निर्देश भी हमें विभिन्न तरीकों से अपने कार्यक्रम आउटपुट को शाखा देने की अनुमति देते हैं।
=> संपूर्ण सी ++ प्रशिक्षण श्रृंखला यहां देखें।
अनुशंसित पाठ
- सॉफ्टवेयर परीक्षण मदद संबद्ध कार्यक्रम!
- लिखो और कमाओ - अनुभवी क्यूए परीक्षकों के लिए कार्यक्रम
- यूनिक्स पाइप्स ट्यूटोरियल: यूनिक्स प्रोग्रामिंग में पाइप्स
- पुस्तकालय कार्य C ++ में
- मुफ़्त के लिए सी ++ प्रोग्रामिंग जानने के लिए 70+ बेस्ट सी ++ ट्यूटोरियल
- कमांड लाइन तर्क सी ++ में
- STL में Iterators
- प्रारंभिक सूचियाँ C ++ में