पाठ 35 / 36

अनिर्धारित व्यवहार और const

C आपको क्या करने देता है — जब तक वह न रुके।

कोई सुरक्षा जाल नहीं

C प्रोग्रामर पर पूरी तरह भरोसा करता है: यह ऐरे की सीमा नहीं जाँचता, वेरिएबल इनिशियलाइज़ नहीं करता, या पॉइंटर सत्यापित नहीं करता। इन नियमों को तोड़ना अनिर्धारित व्यवहार है — प्रोग्राम क्रैश हो सकता है, कचरा दे सकता है, या तब तक "ठीक" दिख सकता है जब तक वह न रुके।

दो क्लासिक: ओवरफ़्लो और कचरा

दोनों बिना किसी त्रुटि के कंपाइल हो जाते हैं और चलते हुए भी "ठीक" लग सकते हैं — यही अनिर्धारित व्यवहार को खतरनाक बनाता है।

int arr[5];
arr[5] = 99;       // buffer overflow: out of bounds

int x;
printf("%d\n", x); // uninitialised: prints garbage

const एक वादा है

किसी पैरामीटर को const चिह्नित करना (जैसे void print(const char *s)) कंपाइलर और अन्य पाठकों दोनों को बताता है कि फंक्शन उसे नहीं बदलेगा — फिर कंपाइलर किसी भी गलती से हुए लेखन को अस्वीकार कर देता है।