असाइनमेंट उदाहरण में स्पष्ट कलाकारों ने कोई उपयोगी अर्थ नहीं बनाया है। हालांकि, ऐसा लगता है कि आप वास्तव में #define NIL ((List *) NULL)
मैक्रो के बारे में सवाल है, जिसका उपयोगिता असाइनमेंट से परे फैली हुई है।
एक जगह जहां यह समझ में आ सकता है वह तब होता है जब आप इसे एक वैरिएडिक फ़ंक्शन या प्रोटोटाइप के बिना घोषित फ़ंक्शन में पास करते हैं। मानक NULL
को 0
या 0L
या ((void *) 0)
या किसी अन्य तरीके से परिभाषित किया जा सकता है, जिसका अर्थ है कि इस प्रकार के कम संदर्भों में इसका अलग-अलग अर्थ हो सकता है। एक स्पष्ट कलाकार यह सुनिश्चित करेगा कि इसे एक सूचक के रूप में सही ढंग से व्याख्या किया गया हो।
उदाहरण के लिए, यह वैध बनाता है
foo(NIL);
साथ कॉल की जगह जबकि आम तौर पर अमान्य है (व्यवहार अपरिभाषित है)
void foo();
int main() {
foo(NULL);
}
void foo(List *p) {
/* whatever */
}
।
इससे मुझे कोई समझ नहीं आती है। आप बिना किसी कलाकार के किसी भी पॉइंटर को NULL असाइन कर सकते हैं। –