c एक स्विच स्टेटमेंट के भीतर स्टैंडअलोन ब्रेक




switch-statement break (2)

मैं इस कोड पर ठोकर खाई, जो अपेक्षित काम करता है:

switch (ev->deviceType) {

    break;

    case DEVICE_TS1E0:
        //some code
        break;

    case DEVICE_TS1E3:
       //some code
       break;

    default:
        //some logging
        break;
}

अब, एक अकेला break; स्विच की शुरुआत में, जिसमें कोई प्रभाव नहीं होता है

क्या कोई ऐसा परिस्थिति है जहां वह break; एक प्रभाव होगा?


उस बयान, किसी भी अन्य बयान के साथ जो switch स्टेटमेंट में एक case खंड में नहीं है, न पहुंचने योग्य कोड, उर्फ ​​डेड कोड। इसका मतलब है कि वे वैसे भी नहीं चलेंगे। उन्हें इस्तेमाल करने की अनुशंसा नहीं की जाती है


टीएल; डीआर कि break स्टेटमेंट अप्रभावी और मृत-कोड है नियंत्रण वहां कभी नहीं पहुंचेगा।

C11 मानक का एक समान मामला का एक बहुत अच्छा उदाहरण है, मुझे सीधे शब्दों का उद्धरण दें

अध्याय §6.8.4.2 / 7 से, ( जोर खान )

उदाहरण कृत्रिम कार्यक्रम के टुकड़े में

switch (expr)
{
    int i = 4;
    f(i);
case 0:
    i = 17;
    /* falls through into default code */
default:
    printf("%d\n", i);
}

ऑब्जेक्ट जिसका पहचानकर्ता i स्वत: भंडारण अवधि (ब्लॉक के भीतर) के साथ मौजूद i , लेकिन कभी भी आरम्भ नहीं किया जाता है, और इस प्रकार यदि नियंत्रक अभिव्यक्ति में एक गैर-ज़ोरो मान होता है, तो printf फ़ंक्शन को कॉल एक अनिश्चित मूल्य तक पहुंच जाएगा। इसी तरह, फ़ंक्शन को कॉल f तक नहीं पहुंचा जा सकता है।





break