मान लें कि मेरे पास एक गणना है।स्विच के डिफ़ॉल्ट लेबल में क्या रखा जाए?
enum class ShapeName : char {TRIANGLE,CIRCLE,SQUARE};
और बाद में मैं इस तरह एक समारोह है:
void Function (ShapeName const shape){
switch (shape){
case ShapeName::TRIANGLE:
DoSomething1();
break;
case ShapeName::CIRCLE:
DoSomething2();
break;
case ShapeName::SQUARE:
DoSomething3();
break;
default:
//THIS CODE BLOCK SHOULD NEVER BE EXECUTED!
}
return;
}
हालांकि डिफ़ॉल्ट लेबल क्रियान्वित किया जा कभी नहीं करना चाहिए, मैं संभावित कीड़े पैदा हो सकता के लिए खाते में करना चाहते हैं तो एक प्रोग्रामर के लिए एक और मूल्य कहते हैं 'आकार नाम' और स्विच में इसके लिए जिम्मेदार नहीं है।
आप मेरी क्या सिफारिश करेंगे?
1. दावे
मैं एक अभिकथन इस्तेमाल कर सकते हैं, लेकिन मैं क्या जोर देते हुए कर रहा हूँ?
assert(false); //?
2. अपवाद
मैं एक अपवाद फेंक सकता है, लेकिन मुझे नहीं लगता कि यह बहुत अच्छा अभ्यास हो जाएगा। मैं इस धारणा के तहत हूं कि अपवाद रन टाइम इवेंट्स के लिए हैं जिन्हें कुछ वातावरण की वजह से भविष्यवाणी नहीं की जा सकती है।
3. बाहर निकलता है
मैं सिर्फ एक त्रुटि के साथ तुरंत कार्यक्रम से बाहर निकल सकते। यह सबसे अच्छा विचार है, लेकिन मुझे यकीन है कि यह अच्छा अभ्यास है। मैंने सोचा कि दावे का लाभ यह था कि जब आप प्रोग्राम को तैयार करते थे तो आप उन्हें बंद कर सकते थे। फिर, वह दावा कोड अब मौजूद नहीं होगा।
शायद एक और तरीका है जिसके बारे में मुझे पता नहीं है। मैं एक कंपाइलर ध्वज का उपयोग करता हूं जो मानों के लिए अनचाहे के बारे में चेतावनी देता है, लेकिन मैं अभी भी जानना चाहता हूं कि दूसरों की क्या सिफारिश है।
4. क्या आप अपने कंपाइलर को चेतावनी देने के लिए कह सकते हैं? यह एक विकल्प है जिसे मैं पुरानी शैली के enums के लिए उम्मीद करता हूँ। –
@SteveJessop g ++ -w -Wall -Wextra -Wswitch -Wswitch-default -Wswitch-enum -std = C++ 0x -o मुख्य main.cpp अजीब, मुझे उपरोक्त कोड के साथ बिल्कुल कोई चेतावनी नहीं मिली। मैंने एक और आकार नाम जोड़ा और डिफ़ॉल्ट लेबल से छुटकारा पा लिया। अब तक कुछ भी नहीं! –
चूहों। सी ++ 11 कार्यान्वयन समाप्त नहीं हुआ है, हालांकि, हम आशा में रह सकते हैं। –