Function statements का एक ऐसा sequence है जो कोई विशेष कार्य करने के लिए design किया जाता है । आप पहले से ही जानते हो की किसी program में main() function होना ज़रूरी है (क्यूंकि program का execution यहीं से शुरू होता है) । आम तौर पर programs main() के अलावा भी कई functions से बने होते हैं ।
किसी Program को अकसर, किए जा रहे हालिया काम को छोड़ कर कोई दूसरा काम करने की ज़रूरत पड़ जाती है । आप भी दैनिक जीवन में ये हमेशा करते हो । उदाहरण के लिए, मान लीजिये आपको किताब पढ़ते वक़्त याद आता है की आपको अपने दोस्त से बात करनी है । आप अभी पढ़े जा रहे page पर एक चिन्ह लगाते हो (page के कोने को मोड़कर या इसके बीच कुछ रखकर), मित्र को फ़ोन लगाते हो, और जब आपकी बात खत्म हो जाती है, आप उस page से वापस पढ़ना शुरू करते हो जिसे आपने चिन्हित किया था ।
C++ programs में भी कुछ ऐसा ही होता है । Program किसी function के अंदर statements को sequentially (सिलसिलेवार क्रम में) execute करता है, जब तक इसे कोई function call statement ना मिल जाये । Function call एक तरह का expression है जो CPU को अभी execute हो रहे function को बीच में ही छोडकर, called function को execute करने की आज्ञा देता है । CPU इसके बाद function call होने की जगह को “चिन्हित” करता है, और फिर दिए गए function को call (execute) करता है । जब called function का execution पूरा हो जाता है तो CPU वापस उसी जगह से execution की शुरुआत करता है जहाँ इसने इससे पहले वाले function को चिन्हित किया था ।
यहाँ एक छोटा सा program दिया जा रहा है जो दर्शाता है की नए functions किस तरह से define और call किये जातें हैं :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//#include <stdafx.h> // Visual Studio users इसे uncomment करें #include <iostream> // std::cout और std::endl के लिए // किसी function doPrint() का definition void doPrint() { std::cout << "In doPrint()" << std::endl; } // function main() का definition int main() { std::cout << "Starting main()" << std::endl; doPrint(); // main() का execution रुका और doPrint() को call किया गया std::cout << "Ending main()" << std::endl; return 0; } |
ये program निम्नलिखित output देता है:
Starting main() In doPrint() Ending main()
ये program (और C++ के सभी program) function main() से execution की शुरुआत करता हैं, और पहले line को execute करने पर print होता है: Starting main()
। main() function का दूसरा line function doPrint() को call कर रहा है । यहाँ पर CPU, main() का execution रोक कर doPrint() function में चला जाता है । doPrint में पहला (और आखरी) line In doPrint()
print करता है । जब doPrint() का execution खत्म होता है, इसे call करने वाला function (जो की main() है क्यूंकि doPrint() को main के अन्दर से ही call किया गया था) वहीं से execution की शुरुआत करता है, जहां इसका execution बीच में रोका गया था । फलस्वरूप, main में अगला statement Ending main()
print करता है ।
ध्यान दे की functions को उनके नाम और एक parameter list जो parenthesis ( () ) में बंद होता है, का इस्तेमाल करके call किया जाता है । हमारे उदाहरण में, क्यूंकि हमारा function कोई parameter इस्तेमाल नहीं करता, इस list को खाली रखा गया है (देखिये, () बिलकुल खाली है) । अगले section में हम function parameters पर और अधिक चर्चा करेंगे । यदि आप parameter list को भूल जाते हो, तो function कभी भी call नहीं किया जा सकेगा!
Return values
यदि आपको याद हो, जब main() function का execution पूरा होता है, ये operating system ( जो main को call करता है) को return statement के माध्यम से एक integer value return करता है ।
इसी प्रकार से आपका लिखा हर function अपने caller को एक single value return कर सकता है । हमलोग function definition पर इसका एक return type set करके कोई एक value return कर सकते हैं । return type एक data type है जो function definition में function के नाम से पहले declare किया जाता है ।
void type के किसी return type का अर्थ है की वो function कोई भी value return नहीं कर सकता । int type के एक return type का मतलब है की function इसके caller को एक integer value return करेगा ।
1 2 3 4 5 6 7 8 9 10 11 |
// void का मतलब है function अपने caller को कुछ भी return नहीं करेगा void returnNothing() { // ये function caller को कुछ return नहीं करेगा, इसलिए कोई return statement नहीं लिखा गया } // int का मतलब है की function caller को एक integer value return करेगा int return5() { return 5; // ये function एक integer return करेगा, इसलिए return statement लिखना ज़रूरी है } |
चलिए इन functions को किसी program में use करते हैं:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <iostream> // void का मतलब है function अपने caller को कुछ भी return नहीं करेगा void returnNothing() { // ये function caller को कुछ return नहीं करेगा, इसलिए कोई return statement नहीं लिखा गया } // int का मतलब है की function caller को एक integer value return करेगा int return5() { return 5; // ये function एक integer return करेगा, इसलिए return statement लिखना ज़रूरी है } int main() { std::cout << return5(); // prints 5 std::cout << return5() + 2; // prints 7 returnNothing(); // ठीक है: function returnNothing() को call किया गया, जिसने कोई value return नही किया return5(); // ठीक है: function return5() को call किया गया, return value का कोई इस्तेमाल नहीं हुआ std::cout << returnNothing(); // ये line compile नहीं होगा । compile करने के लिए इस line को comment out करना पड़ेगा return 0; } |
पहले function call में return5() execute हुआ । Call किये गये function ने caller को 5 return किया जिसे अंत में output operator की सहायता से cout के पास भेज दिया गया ।
दुसरे function call में, return5() ने फिर से caller main को 5 return किया । अब expression कुछ इस प्रकार का होगा: 5 + 2, जो evaluate होने पर 7 देगा । फिर value 7 को cout के पास भेज दिया जायेगा ।
तीसरे function call में, returnNothing() execute किया गया । इस function में कुछ भी नहीं किया गया है और ये main को कोई value भी return नहीं करता, इसलिए अब main() का execution फिर resume हो जाता है ।
चौथे function call में return5() execute होकर main को value 5 return करता है, लेकिन main इस value का कुछ नहीं करता । अर्थात, main न इस value को print करता है, न इसपे कोई mathematical operation (जैसे जोड़, घटाव, गुणा या भाग) करता है, और ना ही इसे किसी variable पर store करता है । इसलिए return value को बाहर कर दिया जाता है ।
5वें function call में returnNothing() void return करता है । C++ के अनुसार किसी void को cout के पास भेजना गलत है, इसलिए जब आप इस line को compile करना चाहोगे तो compiler आपको एक error देगा । आपको इस program को compile करने के लिए 5वें function call statement को comment out करना होगा ।
ये सबसे ज्यादा पूछा जाने वाला सवाल है की, “क्या कोई function, return statement का इस्तेमाल करके एक से अधिक values return कर सकता है?”. इसका सीधा जवाब जवाब “ना” है । कोई function return statement के ज़रिये सिर्फ और सिर्फ एक ही value return कर सकता है । लेकिन function से एक से अधिक value return करने के कुछ उपाय हैं जिनकी चर्चा हम तब करेंगे जब functions को गहरायी से जानेंगे ।
main को return करना
अब आप main() function के काम करने के तरीके को जानने के लिए तैयार हो । जब कोई program execute होता है, आपका operating system program के main() function को call करता है । इसके बाद main के सबसे पहले statement से execution की शरुआत हो जाती है । main() के statements sequentially (सिलसिलेवार ढंग से) execute होते हैं । Sequentially execute होने का मतलब है, सबसे पहला statement सबसे पहले execute होगा, दूसरा पहले के बाद, तीसरा दुसरे के बाद…और इसी तरह आगे भी । अंत में, main operating system को एक integer value (ज्यादातर 0) return करता है । इसी कारण से main को definition के समय int main()
लिखा जाता है ।
कुछ compilers main को void main()
लिखने की अनुमति भी देते हैं । तकनिकी रूप से ये सही है । जब इन compilers को program में void main()
दिखायी देता है, वे इसे इस प्रकार बदल देते हैं:
1 2 3 4 5 |
int main() { // आपका code return 0; } |
आपको हमेसा main() को एक int return करता हुआ define करना चाहिए और इससे (main function से) हमेसा 0 ही return करना चाहिए (या यदि कहीं कोई खराबी है तो कोई और integer) ।
अभी के लिए, आपको अपने program का main() function file में सबसे नीचे define करना चाहिए । हम थोड़ी ही देर में इसका कारण पता लगायेंगे, section 1.7 -- Forward Declarations में ।
Functions का फिर से इस्तेमाल करना
किसी function को एक से अधिक बार भी call किया जा सकता है, जो तब उपयोगी साबित होगा जब आपके program को एक ही काम बार-बार करने की ज़रूरत पड़ेगी ।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//#include <stdafx.h> // Visual Studio users इसे uncomment करें #include <iostream> // getValueFromUser यूजर से एक value लेगा और इसे caller के पास भेज देगा (या caller को return कर देगा) int getValueFromUser() { std::cout << "Enter an integer: "; int a; std::cin >> a; return a; } int main() { int x = getValueFromUser(); // getValueFromUser को पहला call int y = getValueFromUser(); // getValueFromUser को दूसरा call std::cout << x << " + " << y << " = " << x + y << std::endl; return 0; } |
ये program निम्नलिखित output देगा:
Enter an integer: 5 Enter an integer: 7 5 + 7 = 12
यहाँ main() का execution दो बार रोका गया है, getValueFromUser() के हर एक call पर । ध्यान दीजिये की दोनों ही cases में, variable a का value जो user से लिया गया है, वो return statement के द्वारा main() के पास भेजा जाता है जहां main() इन values को x या y variable में store कर लेता है ।
ध्यान दें की केवल main() ही ऐसा function नहीं है जो किसी दुसरे function को call कर सकता है । कोई भी function किसी दुसरे function को call कर सकता है!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//#include <stdafx.h> // Visual Studio users इसे uncomment करें #include <iostream> void printA() { std::cout << "A" << std::endl; } void printB() { std::cout << "B" << std::endl; } // function printAB(), printA() और printB(), दोनों functions को call करता है void printAB() { printA(); printB(); } // main() का definition int main() { std::cout << "Starting main()" << std::endl; printAB(); std::cout << "Ending main()" << std::endl; return 0; } |
ये program निम्नलिखित output देगा:
Starting main() A B Ending main()
Nested functions
C++ में functions को किसी दुसरे function के अन्दर define नहीं किया जा सकता (इस क्रिया को nesting कहा जाता है)। नीचे दिया गया program सही नहीं है:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> int main() { int foo() // ये function main() के अन्दर define किया गया है जो गलत है { std::cout << "foo!"; return 0; } foo(); return 0; } |
ऊपर के program को सही ढंग से लिखने का तरीका ये है:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iostream> int foo() // अब ये main() के भीतर नहीं है { std::cout << "foo!"; return 0; } int main() { foo(); return 0; } |
![]() |
![]() |
![]() |
thank you to start c++ tutorial in hindi. i understand c++ eaily the basic concept and phenomina. please complete the tutorial in hindi version. i completed upto 2.3 lesson, waiting for rest.
धन्यवाद! अगला lesson जल्द ही जोड़ा जायेगा ।