में (Objective-) सी (++) बयानwhile(...) { ... }
, for(...) { ... }
, switch(...) { ...}
आदि एक भी ब्लॉक बयान (if (...) { ... } else { ... }
दो शामिल हैं) होते हैं। ब्लॉक के भीतर घोषणाओं का दायरा केवल उस ब्लॉक है, और यह ब्लॉक के भीतर दो बार समान वैरिएबल घोषित करने में त्रुटि है।
एक switch
के ब्लॉक case ...:
लेबल के एक नंबर शामिल हैं - लेबल ब्लॉक परिसीमित नहीं है, वे कर रहे हैं सिर्फ एक ब्लॉक है कि प्रवाह पर जा सकते हैं को नियंत्रित भीतर इंगित करता है। यह switch
सी में कुछ अन्य भाषाओं की तुलना में भिन्न है जहां प्रत्येक शाखा स्वतंत्र है (क्योंकि if/else
में दो ब्लॉक सी में स्वतंत्र हैं)। एक सी switch
एक ब्लॉक में सिर्फ "गणना गोटो" है। यही कारण है कि break;
कथन मौजूद है, इसके बिना नियंत्रण प्रवाह केवल एक "शाखा" से अगले तक जारी है।
इसका एक अन्य परिणाम यह है कि अलग-अलग शाखाएं उसी चर नामों की घोषणा नहीं कर सकती हैं, if/else
कथन के विपरीत।
अंत में केवल बयान और नहीं घोषणाओं लेबल किया जा सकता है, और एक case ...:
के रूप में लेबल का एक रूप है वहाँ तुरंत एक के बाद एक घोषणा नहीं हो सकता - तो आप एक घोषणा के साथ एक "शाखा" शुरू नहीं कर सकते।
यदि वे शाखाएं जो आप शाखा में घोषित करना चाहते हैं, केवल उस शाखा में उपयोग के लिए हैं (जैसे कि if/else
के ब्लॉक में से किसी एक में घोषित किया जाएगा) तो आप ब्रेसिज़ में शाखा को संलग्न करके सभी समस्याओं को हल कर सकते हैं , { ... }
, इसे ब्लॉक कथन में बनाने के लिए - ब्लॉक को लेबल किया जा सकता है और इसमें स्थानीय घोषणाएं हो सकती हैं। जैसे की तर्ज पर कुछ:
switch (expr)
{
case 1:
{
NSString *var;
// use var
break;
}
case 2:
{
NSNumber *var;
// use var
break;
}
...
}
// no var here
आप, चर जो आप switch
के बाद उपयोग करने की आवश्यकता है तो आप उन्हें switch
से पहले घोषित करना चाहिए करने के लिए बताए रहे हैं, तो के रूप में एक switch
के शरीर एक ब्लॉक एक स्थानीय घोषणा है और इसलिए गुंजाइश। जैसे
NSString *var = nil;
switch (expr)
{
case 1:
...
var = ...;
break;
case 2:
...
var = ...;
break;
...
}
// use var here
HTH
एक स्विच बयान के सभी मामलों में सभी बयान एक ही दायरे में हैं, इसलिए जब आप एक मामले में एक नाम के साथ एक चर घोषित, और फिर आप एक घोषित: की तर्ज पर कुछ एक अलग नाम के तहत एक ही नाम के साथ चर, आप प्रभावी रूप से दो बार घोषणा कर रहे हैं। त्रुटि आवंटन या परिभाषा में नहीं है, यह घोषणा में है। आप या तो प्रत्येक मामले में एक नया दायरा बनाने के लिए घुंघराले ब्रेसिज़ का उपयोग करते हैं, या आप 'स्विच' से पहले एक बार अपना वैरिएबल घोषित करते हैं, और' केस' तक असाइन करना स्थगित करते हैं। – iluvcapra