निम्नलिखित एनम और स्विच स्टेटमेंट पर विचार करें:
typedef enum {
MaskValueUno,
MaskValueDos
} testingMask;
void myFunction(testingMask theMask) {
switch (theMask) {
case MaskValueUno: {}// deal with it
case MaskValueDos: {}// deal with it
default: {} //deal with an unexpected or uninitialized value
}
};
मैं एक ऑब्जेक्टिव-सी प्रोग्रामर हूं, लेकिन मैंने इसे व्यापक दर्शकों के लिए शुद्ध सी में लिखा है।
क्लैंग / एलएलवीएम 4.1 के साथ-सब कुछ मुझे डिफ़ॉल्ट लाइन पर चेतावनी देता है:
स्विच में डिफ़ॉल्ट लेबल जो सभी गणन मूल्यों को कवर करता है
अब, मैं यह देख सकता हूं कि ऐसा क्यों है: एक आदर्श दुनिया में, तर्क में प्रवेश करने वाले एकमात्र मान एनम में theMask
होंगे, इसलिए कोई डिफ़ॉल्ट आवश्यक नहीं है। लेकिन क्या होगा अगर कुछ हैक साथ आते हैं और मेरे सुंदर समारोह में एक अनैतिक रूप से अंतर डालते हैं? मेरे कार्य को पुस्तकालय में एक बूंद के रूप में प्रदान किया जाएगा, और वहां क्या हो सकता है, इस पर मेरा कोई नियंत्रण नहीं है। इसका उपयोग करना default
बहुत ही आसान तरीका है।
एलएलवीएम देवता इस व्यवहार को अपने अयोग्य उपकरण के लिए अयोग्य क्यों मानते हैं? क्या मुझे तर्क की जांच करने के लिए एक बयान से पहले यह होना चाहिए?
-Weverything
उपयोगी हो सकता है, लेकिन इससे निपटने के लिए अपने कोड को बदलने के बारे में सावधान रहें। उन चेतावनियों में से कुछ न केवल बेकार हैं बल्कि प्रति-उत्पादक हैं, और सबसे अच्छी तरह से बंद हैं। (वास्तव में, इसके लिए उपयोग का मामला है -Weverything
: इसके साथ शुरू करें, और बंद करें जो समझ में नहीं आता है।)
"Pro tip: Try setting the -Weverything flag and checking the “Treat Warnings as Errors” box your build settings. This turns on Hard Mode in Xcode."
।