c - जीसीसी में विभिन्न एन्यूम प्रकारों के साथ अंकगणित निर्दिष्ट या निष्पादित करने पर चेतावनी कैसे दी जाती है?



gcc enums (1)

हालांकि मुझे पता है कि एनाम प्रकारों के बीच अंतर करने के लिए यह मान्य सी नहीं है

जीसीसी में -Wenum-compare (जो मैं उपयोग कर रहा हूं) और अपेक्षित रूप से काम करता है

मैंने -Wconversion का उपयोग करने की कोशिश की लेकिन यह कोई अंतर नहीं करता है

कार्य और अंकगणित ऑपरेटरों ( + / - / & / | ... ... आदि) चेतावनी कैसे उत्पन्न कर सकते हैं? (असाइनमेंट, या और ... आदि)

{
    enum Foo f = SOME_VALUE;
    enum Bar b = SOME_OTHER_VALUE;

    if (f != b) {
        /* this warns! */
    }

    f = b;  /* <-- how to warn about this? */
    f |= b;  /* .. and this? */

}

टिप्पणियाँ:

  • सी ++ में स्विच करना एक विकल्प नहीं है (जैसा कि अन्य उत्तर में सुझाया गया है)
  • यह प्रश्न निकट से संबंधित है, हालांकि इसकी नकली नहीं है क्योंकि यह अंकगणित के बजाय तर्कों को पारित करने के बारे में है।

इस उत्तर के अनुसार, केवल झुकाव वांछित व्यवहार का समर्थन करता है।

सी में दृढ़ता से टाइप किए गए enums का अनुकरण करने के लिए कुछ तरीके हैं, लेकिन उन्हें विभिन्न सीमाएं हैं





gcc-warning