आज, मैंने गलती से पाया कि मेरे कंपाइलर किसी मामले के बिना स्विच स्टेटमेंट के अंदर कोड लिखते समय शिकायत नहीं करता है। (इसने केस स्टेटमेंट की कमी के बारे में शिकायत की, लेकिन कोड के बाद एक जोड़ने के बाद, मुझे चेतावनी देने के लिए इतना चेतावनी नहीं थी कि कोड बेकार था।)मामले के बिना स्विच
मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या निम्नलिखित कोड को अनुमति देने का एक उद्देश्य है, या यदि यह केवल उन चीजों में से एक है जहां "इसे प्रतिबंधित करने के लिए यह अधिक काम है, इसलिए इसकी अनुमति है"।
#include <iostream>
void foo() {
std::cout << "foo" << std::endl;
}
int main()
{
for (int a = -10; a < 10; ++a)
{
switch(a)
{
foo();
case 4:
std::cout << "4" << std::endl;
}
}
}
यह अब आउटपुट "4" के रूप में उम्मीद है जब एक == 4, और यह foo आउटपुट कभी नहीं। तो सवाल यह है कि, पहले मामले से पहले foo();
स्टेटमेंट को अनुमति देने के लिए कुछ (संभावित रूप से गूढ़ लेकिन उपयोगी) कारण हैं? मुझे यकीन है कि मुझे वहां घोषित करने और वैरिएबल शुरू करने की अनुमति नहीं है।
(Fwiw, मैं इस कई compilers पर परीक्षण किया गया है, और वे सभी एक ही व्यवहार उपज रहे हैं। हैरानी की बात है, वे भी सब नहीं उत्पादन एक चेतावनी है।)
यह क्या संकलक है? – turnt
मैंने एमएसवीसी 2012 और जीसीसी 4.8.1 दोनों पर इसका परीक्षण किया है। – Shirik
हम्म दिलचस्प। एक विचार जो दिमाग में आता है उसे डिफ़ॉल्ट लिखना नहीं है: और इसके बजाय अंतिम मामले के नीचे कोड लिखना। लेकिन, यह संभावित बुरी प्रथा चिल्लाता है :) –