विंडोज़, मैक और आईओएस के लिए बिना किसी चेतावनी के कोड कोड का निम्नलिखित बिट:एक सदस्य फ़ंक्शन पॉइंटर की तुलना एनयूएलएल की तुलना में एक चेतावनी उत्पन्न क्यों करती है?
class MyClass {
SomeOtherClass * m_object;
void (SomeOtherClass::*m_callback)();
public:
MyClass(SomeOtherClass * _object,void (SomeOtherClass::*_callback)()=NULL) :
m_object(_object),m_callback(_callback) {}
void DoStuff() {
//generates warning: NULL used in arithmetic when compiling with the Android NDK
if (NULL==m_callback) {
m_object->DoNormalCallback();
} else {
(m_object->*m_callback)();
}
}
};
यह चेतावनी क्यों उत्पन्न हुई है और मैं इसके बारे में क्या कर सकता हूं?
यह 'NULL' साथ चीजों की तुलना करने के लिए अच्छा शैली के खिलाफ तुलना करने के लिए, नहीं की तुलना' NULL' वैध है चीजों के साथ। ऑर्डर स्विच करें: 'अगर (m_callback == NULL) ' –
' if (0 == x) 'लिखने के लिए यह अच्छी तरह से ज्ञात चाल है ताकि यदि आप' == '' = 'के साथ भ्रमित हो जाएं, तो आप संकलन तोड़ देंगे, नहीं बस एक चेतावनी (या कुछ नहीं) प्राप्त करें। – hamstergene
कुछ दिशानिर्देश गलती से असाइनमेंट से बचने के लिए तुलना के बाईं तरफ स्थिर रखने के लिए कह रहे हैं। मुझे लगता है कि यह लायक नहीं है लेकिन अन्य राय भी हैं। – Simon