C में एक फंक्शन क्या है?
C प्रोग्रामिंग में फ़ंक्शन कोड का एक पुन: प्रयोज्य ब्लॉक है जो प्रोग्राम को समझने, परीक्षण करने में आसान बनाता है और कॉलिंग प्रोग्राम को बदले बिना आसानी से संशोधित किया जा सकता है। कार्य कोड को विभाजित करते हैं और बेहतर और प्रभावी परिणामों के लिए कार्यक्रम को संशोधित करते हैं। संक्षेप में, एक बड़े कार्यक्रम को विभिन्न उपप्रोग्रामों में विभाजित किया जाता है जिन्हें फ़ंक्शन कहा जाता है
जब आप एक बड़े कार्यक्रम को विभिन्न कार्यों में विभाजित करते हैं, तो प्रत्येक फ़ंक्शन को व्यक्तिगत रूप से प्रबंधित करना आसान हो जाता है। जब भी कार्यक्रम में कोई त्रुटि होती है, तो आप आसानी से दोषपूर्ण कार्यों की जांच कर सकते हैं और केवल उन त्रुटियों को ठीक कर सकते हैं। जब भी आवश्यक हो आप आसानी से कॉल और उपयोग कर सकते हैं जो स्वचालित रूप से समय और स्थान की बचत करता है।
इस ट्यूटोरियल में, आप सीखेंगे-
- लाइब्रेरी बनाम। उपयोगकर्ता-परिभाषित कार्य
- समारोह घोषणा
- कार्य की परिभाषा
- फंक्शन कॉल
- कार्य तर्क
- चर स्कोप
- स्थैतिक चर
- पुनरावर्ती कार्य
- इनलाइन कार्य
लाइब्रेरी बनाम। उपयोगकर्ता-परिभाषित कार्य
प्रत्येक 'C' प्रोग्राम में कम से कम एक फ़ंक्शन होता है जो मुख्य फ़ंक्शन होता है, लेकिन एक प्रोग्राम में किसी भी संख्या में फ़ंक्शन हो सकते हैं। C में मुख्य () फ़ंक्शन एक प्रोग्राम का शुरुआती बिंदु है।
'C' प्रोग्रामिंग में, फ़ंक्शन दो प्रकारों में विभाजित होते हैं:
- पुस्तकालय के कार्य
- उपयोगकर्ता-परिभाषित कार्य
सी में पुस्तकालय और उपयोगकर्ता-परिभाषित कार्यों के बीच अंतर यह है कि हमें लाइब्रेरी फ़ंक्शन के लिए कोड लिखने की आवश्यकता नहीं है। यह पहले से ही हेडर फ़ाइल के अंदर मौजूद है जिसे हम हमेशा एक कार्यक्रम की शुरुआत में शामिल करते हैं। आपको बस एक फ़ंक्शन का नाम लिखना होगा और उचित सिंटैक्स के साथ इसका उपयोग करना होगा। प्रिंटफ, स्कैनफ एक पुस्तकालय समारोह के उदाहरण हैं।
जबकि, एक उपयोगकर्ता-परिभाषित फ़ंक्शन एक प्रकार का फ़ंक्शन है जिसमें हमें एक फ़ंक्शन का एक निकाय लिखना होता है और फ़ंक्शन को कॉल करना होता है जब भी हमें फ़ंक्शन को हमारे प्रोग्राम में कुछ ऑपरेशन करने की आवश्यकता होती है।
C में उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन हमेशा उपयोगकर्ता द्वारा लिखा जाता है, लेकिन बाद में यह 'C' लाइब्रेरी का एक हिस्सा हो सकता है। यह 'सी' प्रोग्रामिंग का एक प्रमुख लाभ है।
C प्रोग्रामिंग फ़ंक्शन को तीन गतिविधियों में विभाजित किया जाता है जैसे,
- समारोह की घोषणा
- कार्य की परिभाषा
- फंक्शन कॉल
समारोह घोषणा
फंक्शन डिक्लेरेशन का मतलब होता है किसी प्रोग्राम का नाम लिखना। यह कोड में कार्यों का उपयोग करने के लिए एक अनिवार्य हिस्सा है। एक फ़ंक्शन घोषणा में, हम केवल एक फ़ंक्शन का नाम निर्दिष्ट करते हैं जिसे हम अपने प्रोग्राम में एक चर घोषणा की तरह उपयोग करने जा रहे हैं। जब तक यह एक कार्यक्रम में घोषित नहीं किया जाता है हम एक फ़ंक्शन का उपयोग नहीं कर सकते। एक फ़ंक्शन घोषणा को "फ़ंक्शन प्रोटोटाइप " भी कहा जाता है ।
फ़ंक्शन घोषणाएँ (जिसे प्रोटोटाइप कहा जाता है) आमतौर पर मुख्य () फ़ंक्शन के ऊपर की जाती हैं और सामान्य रूप लेती हैं:
return_data_type function_name (data_type arguments);
- Return_data_type : बुला बयान को वापस दिए गए मान समारोह के डेटा प्रकार है।
- Function_name : कोष्ठकों द्वारा पीछा किया जाता है
- उनके डेटा प्रकार की घोषणाओं के साथ तर्क नाम वैकल्पिक रूप से कोष्ठकों के अंदर रखे जाते हैं।
हम निम्नलिखित कार्यक्रम पर विचार करते हैं जो दिखाता है कि पूर्णांक चर के घन मान की गणना करने के लिए क्यूब फ़ंक्शन कैसे घोषित किया जाए
#include/*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {
ध्यान रखें कि कोई फ़ंक्शन आवश्यक रूप से मान नहीं लौटाता है। इस स्थिति में, कीवर्ड शून्य का उपयोग किया जाता है।
उदाहरण के लिए, output_message फ़ंक्शन घोषणापत्र इंगित करता है कि फ़ंक्शन मान वापस नहीं करता है: void output_message ();
कार्य की परिभाषा
फंक्शन की परिभाषा का मतलब सिर्फ एक फंक्शन की बॉडी लिखना है। एक फ़ंक्शन के एक निकाय में कथन होते हैं जो एक विशिष्ट कार्य करने जा रहे हैं। एक फ़ंक्शन बॉडी में एकल या स्टेटमेंट्स होते हैं। यह भी एक समारोह का एक अनिवार्य हिस्सा है।
int add(int a,int b) //function body{int c;c=a+b;return c;}
फंक्शन कॉल
फंक्शन कॉल का मतलब है जब भी किसी प्रोग्राम में जरूरी हो तो फंक्शन को कॉल करना। जब भी हम किसी फ़ंक्शन को कॉल करते हैं, तो यह एक ऑपरेशन करता है जिसके लिए इसे डिज़ाइन किया गया था। एक फ़ंक्शन कॉल एक कार्यक्रम में एक वैकल्पिक हिस्सा है।
result = add(4,5);
यहाँ, पूरा कोड है:
#includeint add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}
आउटपुट:
Addition:30
कार्य तर्क
फ़ंक्शन कॉल द्वारा आवश्यक मान प्राप्त करने के लिए फ़ंक्शन के तर्कों का उपयोग किया जाता है। वे स्थिति से मेल खाते हैं; पहला तर्क पहले पैरामीटर को दिया जाता है, दूसरा दूसरे पैरामीटर को और इतने पर।
डिफ़ॉल्ट रूप से, तर्कों को मूल्य द्वारा पारित किया जाता है जिसमें डेटा की एक प्रति को फ़ंक्शन कहा जाता है। वास्तव में पारित चर नहीं बदलेगा।
हम निम्नलिखित कार्यक्रम पर विचार करते हैं जो मान द्वारा पारित मापदंडों को प्रदर्शित करता है:
int add (int x, int y);int main() {int a, b, result;a = 5;b = 10;result = add(a, b);printf("%d + %d\ = %d\n", a, b, result);return 0;}int add (int x, int y) {x += y;return(x);}
कार्यक्रम का आउटपुट है:
5 + 10 = 15
ध्यान रखें कि फ़ंक्शन को जोड़ने के लिए a और b के मानों को परिवर्तित नहीं किया गया था क्योंकि केवल इसका मान पैरामीटर x में दिया गया था।
चर स्कोप
वैरिएबल स्कोप का अर्थ है प्रोग्राम के एक कोड के भीतर वेरिएबल्स की दृश्यता।
C में, चर जो किसी फ़ंक्शन के अंदर घोषित किए जाते हैं, कोड के उस ब्लॉक के लिए स्थानीय होते हैं और फ़ंक्शन के बाहर संदर्भित नहीं किए जा सकते। हालांकि, सभी कार्यों के बाहर घोषित किए गए चर पूरे कार्यक्रम से वैश्विक और सुलभ हैं। एक कार्यक्रम के शीर्ष पर #define के साथ घोषित लगातार पूरे कार्यक्रम से सुलभ हैं। हम निम्नलिखित कार्यक्रम पर विचार करते हैं जो मुख्य और उपयोगकर्ता परिभाषित फ़ंक्शन दोनों से वैश्विक चर के मूल्य को प्रिंट करता है:
#includeint global = 1348;void test();int main() {printf("from the main function : global =%d \n", global);test () ;return 0;}void test (){printf("from user defined function : global =%d \n", global);}
परिणाम:
from the main function : global =1348from user defined function : global =1348
हम कार्यक्रम के विवरण पर चर्चा करते हैं:
- हम प्रारंभिक मूल्य के रूप में 1348 के साथ पूर्णांक गोलाकार चर घोषित करते हैं।
- हम एक परीक्षण () फ़ंक्शन को घोषित करते हैं और परिभाषित करते हैं जो न तो तर्क लेता है और न ही कोई मूल्य देता है। यह फ़ंक्शन केवल ग्लोबेल वैरिएबल वैल्यू को प्रदर्शित करने के लिए प्रिंट करता है, ताकि वैश्विक चर को प्रोग्राम में कहीं भी एक्सेस किया जा सके।
- हम मुख्य फ़ंक्शन के भीतर वैश्विक चर प्रिंट करते हैं।
- हम वैश्विक चर मान को मुद्रित करने के लिए परीक्षण फ़ंक्शन को orde में कहते हैं।
C में, जब फंक्शन पैरामीटर को तर्क दिए जाते हैं, तो पैरामीटर स्थानीय वेरिएबल्स के रूप में कार्य करते हैं जो फ़ंक्शन से बाहर निकलने पर नष्ट हो जाएंगे।
जब आप वैश्विक चर का उपयोग करते हैं, तो सावधानी के साथ उनका उपयोग करें क्योंकि त्रुटियों को जन्म दे सकता है और वे एक कार्यक्रम में कहीं भी बदल सकते हैं। उपयोग करने से पहले उन्हें आरंभीकृत किया जाना चाहिए।
स्थैतिक चर
स्थैतिक चर का एक स्थानीय क्षेत्र होता है। हालांकि, फ़ंक्शन से बाहर निकलने पर वे नष्ट नहीं होते हैं। इसलिए, एक स्टैटिक वैरिएबल हमेशा के लिए अपना मान बनाए रखता है और फ़ंक्शन के दोबारा प्रवेश करने पर इसे एक्सेस किया जा सकता है। घोषित किए जाने पर एक स्थिर वैरिएबल को आरंभीकृत किया जाता है और उपसर्ग स्थिर की आवश्यकता होती है।
निम्न प्रोग्राम एक स्थिर चर का उपयोग करता है:
#includevoid say_hi();int main() {int i;for (i = 0; i < 5; i++) { say_hi();}return 0;}void say_hi() {static int calls_number = 1;printf("Hi number %d\n", calls_number);calls_number ++; }
कार्यक्रम प्रदर्शित करता है:
Hi number 1Hi number 2Hi number 3Hi number 4Hi number 5
पुनरावर्ती कार्य
एक संख्या के भाज्य पर विचार करें जिसकी गणना 6 के रूप में की जाती है! = 6 * 5 * 4 * 3 * 2 * 1।
यह गणना तथ्य की गणना के तथ्य (बराबर -1) तक बार-बार की जाती है जब तक कि तथ्य 1 के बराबर न हो जाए।
एक पुनरावर्ती फ़ंक्शन एक फ़ंक्शन है जो स्वयं कॉल करता है और पुनरावर्ती कॉलों को समाप्त करने के लिए एक निकास स्थिति भी शामिल है। तथ्यात्मक संख्या की गणना के मामले में, बाहर निकलने की स्थिति वास्तव में 1. के बराबर होती है। जब तक कि बाहर निकलने की स्थिति सही नहीं हो जाती है तब तक कॉल "स्टैकिंग" द्वारा पुनरावृत्ति कार्य करता है।
उदाहरण के लिए:
#includeint factorial(int number);int main() {int x = 6;printf("The factorial of %d is %d\n", x, factorial(x));return 0;}int factorial(int number) {if (number == 1) return (1); /* exiting condition */elsereturn (number * factorial(number - 1));}
कार्यक्रम प्रदर्शित करता है:
The factorial of 6 is 720
यहां, हम कार्यक्रम के विवरण पर चर्चा करते हैं:
- हम अपने पुनरावर्ती फैक्टरियल फ़ंक्शन की घोषणा करते हैं जो पूर्णांक पैरामीटर लेता है और इस पैरामीटर के फैक्टरियल को लौटाता है। यह फ़ंक्शन स्वयं कॉल करेगा और बाहर निकलने तक संख्या घटाएगा, या आधार स्थिति तक पहुंच जाएगा। जब स्थिति सही होती है, तो पहले से उत्पन्न मान एक-दूसरे से गुणा हो जाएंगे, और अंतिम तथ्यात्मक मूल्य वापस आ जाएगा।
- हम एक पूर्णांक चर को "6" के साथ घोषित करते हैं और आरंभ करते हैं और फिर हमारे तथ्यात्मक फ़ंक्शन को कॉल करके इसके फैक्टोरियल मान को प्रिंट करते हैं।
निम्नलिखित चार्ट पर विचार करें ताकि पुनरावर्ती तंत्र को समझने के लिए जो आधार मामले या रोक स्थिति तक पहुंचने के लिए फ़ंक्शन को स्वयं बुलाता है, और उसके बाद, हम पिछले मान एकत्र करते हैं:
इनलाइन कार्य
C प्रोग्रामिंग में फ़ंक्शन का उपयोग सबसे अधिक बार उपयोग किए जाने वाले निर्देशों को संग्रहीत करने के लिए किया जाता है। इसका उपयोग कार्यक्रम को संशोधित करने के लिए किया जाता है।
जब भी किसी फ़ंक्शन को कॉल किया जाता है, तो निर्देश सूचक फ़ंक्शन की परिभाषा में कूद जाता है। किसी फंक्शन को अंजाम देने के बाद, इंस्ट्रक्टर पॉइंटर उस स्टेटमेंट पर वापस आ जाता है, जहाँ से वह फंक्शन की परिभाषा में कूदता है।
जब भी हम फ़ंक्शन का उपयोग करते हैं, तो हमें फ़ंक्शन परिभाषा में कूदने और स्टेटमेंट पर लौटने के लिए एक अतिरिक्त पॉइंटर सिर की आवश्यकता होती है। ऐसे पॉइंटर हेड्स की आवश्यकता को खत्म करने के लिए, हम इनलाइन फ़ंक्शन का उपयोग करते हैं।
इनलाइन फ़ंक्शन में, एक फ़ंक्शन कॉल को सीधे वास्तविक प्रोग्राम कोड द्वारा बदल दिया जाता है। यह किसी भी ब्लॉक पर नहीं जाता है क्योंकि सभी ऑपरेशन इनलाइन फ़ंक्शन के अंदर किए जाते हैं।
इनलाइन फ़ंक्शन का उपयोग ज्यादातर छोटी गणनाओं के लिए किया जाता है। बड़ी कंप्यूटिंग शामिल होने पर वे उपयुक्त नहीं हैं।
इनलाइन फ़ंक्शन सामान्य फ़ंक्शन के समान है सिवाय इसके कि कीवर्ड इनलाइन फ़ंक्शन नाम से पहले है। इनलाइन फ़ंक्शन निम्न सिंटैक्स के साथ बनाए जाते हैं:
inline function_name (){//function definition}
आइए हम एक इनलाइन फ़ंक्शन को लागू करने के लिए एक प्रोग्राम लिखते हैं।
inline int add(int a, int b) //inline function declaration{return(a+b);}int main(){int c=add(10,20);printf("Addition:%d\n",c);getch();}
आउटपुट:
Addition: 30
उपरोक्त कार्यक्रम दो संख्याओं को जोड़ने के लिए एक इनलाइन फ़ंक्शन के उपयोग को दर्शाता है। जैसा कि हम देख सकते हैं, हमने इनलाइन फ़ंक्शन के भीतर दो नंबरों को जोड़ दिया है बिना कोई अतिरिक्त लाइन लिखे। फंक्शन कॉल के दौरान हमने केवल मानों को पारित किया है, जिस पर हमें अतिरिक्त प्रदर्शन करना है।
सारांश
- एक फ़ंक्शन एक मिनी-प्रोग्राम या एक उपप्रोग्राम है।
- कार्यक्रम को संशोधित करने के लिए फ़ंक्शंस का उपयोग किया जाता है।
- पुस्तकालय और उपयोगकर्ता-परिभाषित दो प्रकार के कार्य हैं।
- एक फंक्शन में एक डिक्लेरेशन, फंक्शन बॉडी और एक फंक्शन कॉल पार्ट होता है।
- समारोह की घोषणा और शरीर अनिवार्य है।
- एक कार्यक्रम में एक फ़ंक्शन कॉल वैकल्पिक हो सकता है।
- सी प्रोग्राम में कम से कम एक फ़ंक्शन है; यह मुख्य कार्य () है।
- प्रत्येक फ़ंक्शन का एक नाम, डेटा प्रकार का रिटर्न मान या शून्य, पैरामीटर होता है।
- प्रत्येक फ़ंक्शन को आपके C प्रोग्राम में परिभाषित और घोषित किया जाना चाहिए।
- ध्यान रखें कि जैसे ही हम फ़ंक्शन कॉल से बाहर निकलते हैं, C फ़ंक्शन में सामान्य चर नष्ट हो जाते हैं।
- किसी फ़ंक्शन में पास किए गए तर्कों को नहीं बदला जाएगा क्योंकि वे पते से कोई भी मूल्य नहीं देते हैं।
- चर दायरे को एक कार्यक्रम के भीतर चर की दृश्यता के रूप में संदर्भित किया जाता है
- C प्रोग्रामिंग में वैश्विक और स्थानीय चर हैं