पुराने सी/सी ++ कोड को साफ करना जो enums के बजाय हार्डकोडेड पूर्णांक अक्षर का उपयोग करता है, यह उन स्थानों को खोजने के लिए कठिन है जहां फ़ंक्शन-घोषणा ठीक से प्रतिक्रिया की गई है लेकिन शरीर नहीं। जैसेक्या कोई सी/सी ++ कंपाइलर है जो int (या त्रुटि दे सकता है) या int को enum रूपांतरण कर सकता है?
enum important {
little = 1,
abit = 2,
much = 3
};
void blah(int e)
{
// magic stuff here
}
void boing(int e) { ... }
void guck(important e)
{
switch (e) {
case 3: // this would be a good place for a warning
blah(e); // and this
break;
default:
boing((int)e); // but this is OK (although imperfect and a warning would be acceptable)
break;
}
}
टिप्पणी करना/प्रत्येक enum प्रकार को संशोधित करने या कोड के माध्यम से खोज के रूप में वहाँ बहुत बहुत सारे अलग अलग enums हैं, तो यह प्राथमिकता नहीं दी जाती है, लेकिन एक स्वीकार्य समाधान हो सकता है उन्हें भी काम भी पर्याप्त मात्रा में होगा।
मुझे इसे किसी भी मुख्य कंपाइलर या अन्य टूल्स (जीसीसी ज्यादातर) या प्लेटफ़ॉर्म (अधिकांश) में होने की आवश्यकता नहीं है, इसे मैन्युअल रूप से चलाने के लिए दो बार पर्याप्त होगा, लेकिन मैं ऐसा कुछ पसंद करूंगा जो नहीं है बहुत गूढ़ या सस्ता।
क्या जीसीसी इस पूरी तरह से संभाल नहीं करता है? मैं g ++ का उपयोग कर रहा हूं और हमेशा वर्णित चेतावनियां देखता हूं। शुद्ध सी संकलक अलग व्यवहार करता है? – Basilevs
नहीं, इस कोड को संकलित करना (शून्य ... और प्लस एक खाली मुख्य()) के साथ: g ++ -Wall test.cpp 0 चेतावनियां देता है। Int से enum के लिए प्रचार चेतावनी दी जाती है, लेकिन दूसरी तरफ नहीं। यदि आपके पास काम करने का दूसरा तरीका है, तो कृपया मुझे अपनी कमांड लाइन दें। कृपया ... –