2011-03-02 12 views
6

मैं एक संकलन त्रुटि कोड के इस ब्लॉक में हो रही है:उम्मीद अभिव्यक्ति से पहले ... स्विच वक्तव्य में

switch(event) { 
    case kCFStreamEventHasBytesAvailable: 
     UInt8 buf[BUFSIZE]; 
     CFIndex bytesRead = CFReadStreamRead(stream, buf, BUFSIZE); 
     if (bytesRead > 0) { 
      handleBytes(buf, bytesRead); 
     } 
     break; 
    case kCFStreamEventErrorOccurred: 
     NSLog(@"A Read Stream Error Has Occurred!"); 
    case kCFStreamEventEndEncountered: 
     NSLog(@"A Read Stream Event End!"); 
    default: 
     break; 
} 

लाइन UInt8 buf[BUFSIZE]; "UInt8 से पहले अपेक्षित अभिव्यक्ति" क्यों शिकायत करने के लिए संकलक खड़ी कर रहा है?

धन्यवाद!

+2

में के रूप में यह वर्णित [यहां] (परिचय http://stackoverflow.com/questions/92396/ क्यों-कैन-वैरिएबल-घोषित-इन-ए-स्विच-स्टेटमेंट) विस्तार से। –

+1

यह कई बार कई बार पूछा गया है: http://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement http://stackoverflow.com/questions/ 12311 9 8/घोषित-चर-अंदर-ए-स्विच-कथन http://stackoverflow.com/questions/1115304/can-i-declare-variables-inside-an-objective-c-switch-statement http: // stackoverflow। कॉम/प्रश्न/1180550/अजीब-स्विच-त्रुटि-इन-ओबीजे-सी http://stackoverflow.com/questions/3757445/switch-case-declaration-with-initialization-declaration-and-then-assignment –

उत्तर

16

स्विच स्टेटमेंट नए स्कोप पेश नहीं करते हैं। सी भाषा के नमूने के मुताबिक, एक नियमित बयान में एक केस स्टेटमेंट का पालन करना चाहिए - एक परिवर्तनीय घोषणा की अनुमति नहीं है। आप अपनी परिवर्तनीय घोषणा से पहले ; डाल सकते हैं और संकलक इसे स्वीकार करेगा, लेकिन आपके द्वारा परिभाषित चर स्विच स्विच के माता-पिता के दायरे में होगा, जिसका अर्थ है कि आप किसी अन्य केस स्टेटमेंट के अंदर चर को फिर से घोषित नहीं कर सकते हैं।

आम तौर पर जब एक मामले बयान के अंदर चर को परिभाषित करता है, एक मामले बयान के लिए एक नया गुंजाइश,

switch(event) { 
    case kCFStreamEventHasBytesAvailable: { 
     // do stuff here 
     break; 
    } 
    case ... 
} 
+0

विस्मयकारी स्पष्टीकरण। धन्यवाद! – Nick

संबंधित मुद्दे