How to Create a Statement Block in C++: {} (Curly Braces) के बीच लिखे जाने वाले सारे Statements को Statements का एक Block कहा जाता है। ये बात हमेंशा ध्यान रखें कि एक Block के Statements दूसरे Block के Statements से बिल्कुल ही Separated होते हैं। हम जिस Block में जिन Statements को Use करते हैं या जिन Variables को Define करते हैं, वे Variables केवल उसी Block के लिए ही उपयोगी होते हैं। उन्हीं Variables को किसी दूसरे Block में Directly Access नहीं किया जा सकता है।
Block के साथ ही हर Object या Variable का एक Scope होता है। Scope वह स्थिति होती है, जहां से कोई Variable Create होने के बाद Use होने की अवस्था में होता है। इसे समझने के लिए हम एक Program देखते हैं।
// File : BlockNScope.cpp #include <iostream.h> #include <conio.h> void main() { // Start Block of main Function m = 10; // Error: m is not in this block until now. int x = 30; { // Inner Block Started int y = 30; int x = 50; cout << "Value of x of current block " << x << endl; } // Inner Block Ended { // Inner Block Started // OK: x have been created before. So this is in the scope in this block cout << " X in Inner Block of outer Block" << x << endl; cout << " Y of Other Block " << y << endl; } // Inner Block Ended cout << "Value of Y " << y << endl; cout << "Value of Y of Inner Block " << y << endl; // Error: int m; } // End of the main Function Block
इस Program को जब हम Compile करने की कोशिश करते हैं, तो हमें निम्न Errors प्राप्त होती हैं:
Errors: Info :Compiling C:BC5BINblocknscope.cpp Error: blocknscope.cpp(9,7):Undefined symbol 'm' Warn : blocknscope.cpp(17,5):'y' is assigned a value that is never used Error: blocknscope.cpp(22,36):Undefined symbol 'y' Error: blocknscope.cpp(28,10):Multiple declaration for 'm' Warn : blocknscope.cpp(29,2):'m' is declared but never used
यहां सबसे पहली Error ये आ रही है कि हमने m नाम के Variable को Define नहीं किया है, जबकि Program के अन्तिम Statement में हमने m को Define किया है। ये Error इसलिए आ रही है, क्योंकि Compiler Program को उपर से नीचे की तरफ Execute करता है। इस स्थिति में उसे सबसे पहले मिलने वाला Statement m = 10; होता है। चूंकि अभी m नाम का Variable Memory में Create नहीं हुआ है, इसलिए अभी तक ये Variable Main Function के Block के Scope में नहीं है।
अतः हम इस Variable को अभी Access नहीं कर सकते, जब तक कि ये Define ना हो जाए और ये Variable Program के अन्तिम Statement से Define होता है। यानी Program के अन्तिम Statement से इस Variable का Scope चालू होता है।
यदि इस Statement को Program की शुरूआत में लिख दें, तो Program के शुरू होते ही ये Statement Execute होगा और m नाम का Variable Main Function के Block में Memory में Create हो जाएगा और इस Variable का Scope शुरू हो जाएगा। इस Error को सही करके Program को फिर से Compile किया जाए, तो अब हमें निम्न Errors प्राप्त होती हैं:
Warn : blocknscope.cpp(18,5):'y' is assigned a value that is never used Error: blocknscope.cpp(23,36):Undefined symbol 'y' Warn : blocknscope.cpp(29,2):'m' is assigned a value that is never used
यहां y नाम के Variable को Compiler Undefined मानता है, जबकि हमने y नाम के Variable को Main Block के अन्दर एक और Block Create करके उसमें Declare किया है। Compiler ऐसा इसलिए करता है क्योंकि जब हम किसी Block में कोई Variable Create करते हैं, तो वह Variable केवल उस Block तक के लिए ही उपयोगी होता है। यानी Variable केवल उस Block तक ही सीमित रहता है।
जैसे ही Program Control Block के Statements को Execute करके Block से बाहर निकलता है, Block में Created Variable y का Scope भी समाप्त हो जाता है यानी Variable y केवल Block में ही Accessible है। अतः इस Error को हटाने के लिए हमें Main Functions के Block में y नाम के Variable को Create करना होगा। ये दोनों परिवर्तन करने हमारा Program निम्नानुसार हो जाता हैः
// File : BlockNScope.cpp #include <iostream.h> #include <conio.h> void main() { // Start Block of main Function int m; int y = 20; m = 10; // Error: m is not in this block until now. int x = 30; { // Inner Block Started int y = 30; int x = 50; cout << "Value of x of current block " << x << endl; } // Inner Block Ended { // Inner Block Started // OK: x have been created before. So this is in the scope in this block cout << " X in Inner Block of outer Block" << x << endl; cout << " Y of Other Block " << y << endl; } // Inner Block Ended cout << "Value of Y " << y << endl; cout << "Value of Y of Inner Block " << y << endl; // Error: getch(); } // End of the main Function Block Output Value of x of current block 50 X in Inner Block of outer Block 30 Y of Other Block 20 Value of Y 20 Value of Y of Inner Block 20
इस Program के Output में हम देख सकते हैं कि हमारे पास x व y नाम के दो Variables हैं। पहला Variable, Main Functions के Block में है जबकि दूसरा Main Function के अन्दर Define किए गए दूसरे Block में हैं।
जब Program को Run किया जाता है, तब Program के Inner Block में लिखे गए cout Statement का Execution होने पर हमें Output में x का मान 30 नहीं बल्कि 50 प्राप्त होता है। जबकि हमने Main Function के Block में x का मान 30 दिया है। साथ ही जब हम Inner Block के y का मान Print करना चाहते हैं, तब भी हमें Main Function के ही Block के y का मान Output में प्राप्त होता है।
ऐसा इसलिए होता है क्योंकि Compiler जब Inner Most Block में किसी Variable के मान को Print करना चाहता है, तब वह उस Block में ही सबसे पहले वांछित Variable को खोजता है। चूंकि x नाम का Variable Compiler को Inner Block में ही मिल जाता है, इसलिए Compiler Main Function के Block के x के मान को Output में Print नहीं करता, बल्कि Inner Block के x के मान को ही Output में Print कर देता है।
जबकि जब हम y का मान Main Functions के Block में Print करना चाहते हैं, तब Compiler Inner Block के Variable y के मान को Print नहीं करता बल्कि दोनों ही बार Main Function के Block के y के मान को ही Print कर देता है।
इसका कारण ये है कि Compiler कभी भी जिस Block में होता है, उसमें और उससे बाहर की तरफ ही किसी भी Variable को खोजता है। किसी Block के अन्दर यदि दूसरा Block हो, तो उस Inner Block में Compiler किसी Variable को नहीं खोजता है। क्योंकि जैसे ही Compiler Inner Most Block को Execute करके Block से बाहर आता है, Inner Block और उसके सभी Variables Memory से Destroy हो जाते हैं।
इसी कारण से Compiler Inner Most Block में Variable को नहीं खोजता है, साथ ही जो भी Statement हम किसी Program में Use करते हैं, उसमें से Compiler केवल उन्हीं Statements के बारे में जानता है, जहां तक के Statements को Compiler ने Execute कर लिया है। Compiler ने जिन Statements को Execute नहीं किया होता है, Compiler उन Statements के बारे में तब तक कुछ नहीं जानता है, जब तक कि Compiler उन्हें Execute नहीं कर देता है।
इस तरह से Compiler जब किसी Current Statement पर होता है, तब दो स्थितियों में से किसी एक स्थिति में होता है। यदि Compiler किसी Inner Block को Execute कर चुका है, तो उसमें Define किए गए किसी Variable के बारे में नहीं जानता है, क्योंकि Block से बाहर आते ही Block के सभी Variables Destroy हो चुके होते हैं, जबकि यदि Compiler जिस Statement पर है उस Statement से बाद में किसी Statement या Block में कोई Variable Define किया गया है, तो उसके बारे में भी कुछ नहीं जानता है, क्योंकि अभी तक Compiler ने उन Statements को Execute ही नहीं किया है।
I/O Streams
हमने cout व cin Objects को Use करने की जो तकनीक इस अध्याय में प्रदर्शित की है, इन्हें I/O Streams कहा जाता है। Stream Data के Flow का एक साधारण तरीका होता है। हम जब भी कोई Program बनाते हैं, हमें हमारे Program में Input व Output की C++ द्वारा प्रदान की जाने वाली सुविधा को प्राप्त करने के लिए, IOSTREAM.H नाम की एक Header File को Include करना पडता है।
C Language में हम Input Output के लिए printf() व scanf() Functions का प्रयोग करते हैं, जिसमें हमें विभिन्न प्रकार के Data Type के Variables को Access करने के लिए विभिन्न प्रकार के Control Strings का प्रयोग करना पडता है। यदि हम गलती से कहीं पर गलत Control String का प्रयोग कर देते हैं, तो हमारा Program हमें कभी सही परिणाम प्रदान नहीं करता।
C++ में इस प्रकार से होने वाली Mistakes को Avoid करने के लिए इसमें नए तरीके के Input व Output Approach को Add किया गया है। इसके प्रयोग से हम किसी भी प्रकार के Data Type के साथ बिना किसी प्रकार के Control Strings का प्रयोग किए प्रक्रिया कर सकते हैं। ये एक बहुत ही उपयोगी तकनीक है जिसमें Data Type Control String के प्रयोग से होने वाली Mismatching से होने वाली Mistakes की सम्भावना नहीं रहती है। (How to Create a Statement Block in C++)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C++ Programming Language in Hindi | Page: 666 | Format: PDF