इस कोड पर विचार करें:
void foo()
{
goto bar;
int x = 0;
bar: ;
}
जीसीसी और क्लैंग इसे अस्वीकार करते हैं , क्योंकि कूदने से bar:
चर आरंभीकरण को दरकिनार कर देता है। MSVC बिल्कुल भी शिकायत नहीं करता ( चेतावनी के x
बाद उपयोग करने के अलावा bar:
)।
हम एक के साथ एक समान काम कर सकते हैं switch
:
void foo()
{
switch (0)
{
int x = 0;
case 0: ;
}
}
अब सभी तीन संकलक त्रुटियों का उत्सर्जन करते हैं ।
क्या वे स्निपेट्स बीमार हैं? या वे यूबी का कारण बनते हैं?
मुझे लगता था कि दोनों बीमार थे, लेकिन मैं मानक के नए हिस्सों को नहीं खोज सकता। [stmt.goto] इस बारे में कुछ नहीं कहता, और न ही [stmt.select] ।
/permissive-
ध्वज को MSVC में जोड़ें और यह शिकायत भी करेगा। मैं नहीं जानता कि क्या उस ध्वज के बिना MSVC का व्यवहार अच्छी तरह से परिभाषित है (मैं ऐसा मानूंगा, अन्यथा वे इसे अनुमति क्यों देंगे?)।
x
छलांग के बाद उपयोग करते हैं तो मुद्दा अधिक तुच्छ होगा ।