त्वरित प्रश्न - के बजाय ==
के उपयोग के लिए कोई अच्छा तरीका है?inadvertent ऑब्जेक्ट पॉइंटर तुलना कैसे प्राप्त करें?
पूरी कहानी:
typedef long DataKey;
DataKey x;
DataKey y;
if (x == y) {
// do stuff
}
मैं अब एक वस्तु के साथ मेरी DataKey
के लिए एक long
का उपयोग कर को बदलने के लिए एक की जरूरत है:
मैं कोड का एक समूह एक तरह से इस तरह था। वर्ग वैश्विक खोज और की जगह का एक समूह बनाने और करने के बाद, मेरे कोड अब इस तरह तरह का है:
@interface DataKey : NSObject
DataKey *x;
DataKey *y;
if (x == y) { // uh-oh - this is now bad
// do stuff
}
वहाँ एक चेतावनी मैं संकलक कि संकेत में अदिश ऑपरेटर्स का उपयोग कर के बारे में चेताते में सक्षम कर सकते हैं है? मैं एलएलवीएम 4.1 कंपाइलर के साथ एक्सकोड 4.5.2 का उपयोग कर रहा हूं। मैं एक खोजने में सक्षम नहीं हूं।
इस कोड को ठीक करने में मदद करने के लिए कोई अन्य सुझाव? यह एक मामूली कोड आधार नहीं है। सौदा करने के लिए सैकड़ों स्रोत फाइलें हैं। यह एक प्रमुख रिफैक्टरिंग प्रयास है।
संपादित करें:
यह महान अगर वहाँ ज्यादा है जब आप के बजाय एक if
हालत की तुलना में काम का उपयोग जैसा एक चेतावनी थी होगा। आप इसके लिए चेतावनी प्राप्त कर सकते हैं और चेतावनी को रोकने के लिए कंस्ट्रैसिस का उपयोग कर सकते हैं।
अद्यतन:
टिप्पणी में एक सुझाव के आधार पर, मैं एक परीक्षण परियोजना के लिए -Weverything
संकलक विकल्प जोड़ा। ==
के साथ दो ऑब्जेक्ट पॉइंटर्स की तुलना करते समय यह वांछित परिणाम उत्पन्न नहीं करता था।
शायद operator==
विधि को अधिभारित करने के लिए सी ++ का संयोजन, और उस ऑपरेटर का उपयोग करने का प्रयास करते समय कुछ कंपाइलर चेतावनी/त्रुटि प्राप्त की जा सकती है। मैं इस विकल्प पर केंद्रित एक और सवाल पोस्ट कर सकता हूं।
अच्छा सवाल। कैसे [जांच कर रहा है कि यह एक वैध सूचक है] (http://www.cocoawithlove.com/2010/10/testing-if-arbitrary-pointer-is-valid.html) और फिर कस्टम कंपाइलर चेतावनी को ' कुछ पाठ चेतावनी '। सुनिश्चित नहीं है कि आप जो खोज रहे हैं। – iDev
@ACB मुझे यकीन नहीं है कि उस लिंक की जानकारी यहां कैसे लागू की जा सकती है। मैं (आदर्श) एक संकलन समय की जांच कर रहा हूं। वह लिंक रनटाइम चेक के लिए है। – rmaddy
यह एक उचित संकलक विकल्प होगा, लेकिन मैंने कभी ऐसा नहीं देखा है, और मैं किसी भी मैक्रो चाल या त्रुटियों को बल देने के बारे में सोच नहीं सकता। –