मैं इसके साथ शुरू करूँगा: स्थिरता राजा है, निर्णय आपके कोड आधार में स्थिरता से कम महत्वपूर्ण है।
C ++ में
NULL को C ++ में 0 या 0L के रूप में परिभाषित किया गया है।
यदि आपने C ++ प्रोग्रामिंग लैंग्वेज Bjarne Stroustrup0NULL पढ़ी है , तो असाइनमेंट करते समय मैक्रो से बचने के लिए स्पष्ट रूप से उपयोग करने का सुझाव देता है , मुझे यकीन नहीं है कि अगर उसने तुलना के साथ भी ऐसा ही किया है, तो मुझे पुस्तक पढ़ते हुए थोड़ी देर हो गई है, मुझे लगता है कि उसने अभी किया थाif(some_ptr) एक स्पष्ट तुलना के बिना लेकिन मैं उस पर फ़र्ज़ी हूं।
इसका कारण यह है कि NULLमैक्रो कपटपूर्ण है (जैसा कि लगभग सभी मैक्रोज़ हैं) यह वास्तव में 0शाब्दिक है, न कि एक अद्वितीय प्रकार जैसा कि नाम से पता चलता है कि यह हो सकता है। मैक्रो से बचना C ++ में सामान्य दिशानिर्देशों में से एक है। दूसरी ओर, 0पूर्णांक की तरह दिखता है और यह तब नहीं होता है जब इसकी तुलना या संकेत करने वाले को दी जाती है। व्यक्तिगत रूप से मैं किसी भी तरह से जा सकता था, लेकिन आम तौर पर मैं स्पष्ट तुलना को छोड़ देता हूं (हालांकि कुछ लोग इसे नापसंद करते हैं जो शायद इसीलिए आपके पास वैसे भी बदलाव का सुझाव देने वाला योगदानकर्ता है)।
व्यक्तिगत भावनाओं के बावजूद यह काफी हद तक कम से कम बुराई का एक विकल्प है क्योंकि एक सही तरीका नहीं है।
यह स्पष्ट है और एक सामान्य मुहावरा है और मैं इसे पसंद करता हूं, तुलना के दौरान गलती से कोई मान असाइन करने का कोई मौका नहीं है और यह स्पष्ट रूप से पढ़ता है:
if(some_ptr){;}
यदि आप जानते हैं कि some_ptrयह एक सूचक प्रकार है, तो यह स्पष्ट है, लेकिन यह पूर्णांक तुलना की तरह भी लग सकता है:
if(some_ptr != 0){;}
यह स्पष्ट-ईश है, आम मामलों में यह समझ में आता है ... लेकिन यह एक टपका हुआ अमूर्त है, NULLवास्तव में 0शाब्दिक है और आसानी से दुरुपयोग किया जा सकता है:
if(some_ptr != NULL){;}
C ++ 0x में nullptr है जो अब पसंदीदा विधि है क्योंकि यह स्पष्ट और सटीक है, बस आकस्मिक असाइनमेंट के बारे में सावधान रहें:
if(some_ptr != nullptr){;}
जब तक आप C ++ 0x पर माइग्रेट करने में सक्षम होते हैं, मैं तर्क देता हूं कि यह चिंता करना समय की बर्बादी है कि आप इनमें से किस पद्धति का उपयोग करते हैं, वे सभी अपर्याप्त हैं यही वजह है कि नल्ट्रॉप का आविष्कार किया गया था (जेनेरिक प्रोग्रामिंग मुद्दों के साथ जो सही अग्रेषण के साथ आए थे ।) स्थिरता बनाए रखने के लिए सबसे महत्वपूर्ण बात है।
सी में
C एक अलग जानवर है।
C NULL में 0 या के रूप में परिभाषित किया जा सकता है ((शून्य *) 0), C99 कार्यान्वित परिभाषित नल सूचक स्थिरांक के लिए अनुमति देता है। तो यह वास्तव में NULL के कार्यान्वयन की परिभाषा के लिए नीचे आता है और आपको इसे अपने मानक पुस्तकालय में निरीक्षण करना होगा।
मैक्रोज़ बहुत आम हैं और सामान्य तौर पर भाषा में सामान्य प्रोग्रामिंग समर्थन और अन्य चीजों में कमियों के लिए उनका उपयोग किया जाता है। भाषा बहुत सरल है और प्री-प्रोसेसर पर निर्भरता अधिक सामान्य है।
इस दृष्टिकोण से मैं संभवतः NULLसी में मैक्रो परिभाषा का उपयोग करने की सलाह दूंगा।