पाठ 35 / 36
अनिर्धारित व्यवहार और const
C आपको क्या करने देता है — जब तक वह न रुके।
कोई सुरक्षा जाल नहीं
C प्रोग्रामर पर पूरी तरह भरोसा करता है: यह ऐरे की सीमा नहीं जाँचता, वेरिएबल इनिशियलाइज़ नहीं करता, या पॉइंटर सत्यापित नहीं करता। इन नियमों को तोड़ना अनिर्धारित व्यवहार है — प्रोग्राम क्रैश हो सकता है, कचरा दे सकता है, या तब तक "ठीक" दिख सकता है जब तक वह न रुके।
दो क्लासिक: ओवरफ़्लो और कचरा
दोनों बिना किसी त्रुटि के कंपाइल हो जाते हैं और चलते हुए भी "ठीक" लग सकते हैं — यही अनिर्धारित व्यवहार को खतरनाक बनाता है।
int arr[5];
arr[5] = 99; // buffer overflow: out of bounds
int x;
printf("%d\n", x); // uninitialised: prints garbageconst एक वादा है
किसी पैरामीटर को const चिह्नित करना (जैसे void print(const char *s)) कंपाइलर और अन्य पाठकों दोनों को बताता है कि फंक्शन उसे नहीं बदलेगा — फिर कंपाइलर किसी भी गलती से हुए लेखन को अस्वीकार कर देता है।