जब मुझे पहली बार सी से पेश किया गया था तो मुझे हमेशा कार्य के शीर्ष पर अपने चर घोषित करने के लिए कहा गया था। अब जब मुझे भाषा का एक मजबूत समझ है तो मैं कोडिंग शैली पर अपने प्रयासों पर ध्यान केंद्रित कर रहा हूं, विशेष रूप से मेरे चर के दायरे को सीमित कर रहा हूं। मैंने दायरे को सीमित करने के लाभों के बारे में पढ़ा है और मैं एक दिलचस्प उदाहरण में आया हूं। जाहिर है, C99 आपको ऐसा करने की अनुमति देता है ...मैं कानूनी तौर पर सी 99 में एक चर घोषित कर सकता हूं?
for (int i = 0; i < 10; i++)
{
puts("hello");
}
मैंने सोचा था कि एक चर गुंजाइश भीतर सबसे घुंघराले ब्रेसिज़ { }
आसपास के द्वारा सीमित था, लेकिन ऊपर के उदाहरण में int i
में सीमित हो गया लगता है फॉर-लूप के घुंघराले ब्रेसिज़ द्वारा गुंजाइश, भले ही इसे उनके बाहर घोषित किया गया हो।
मैंने उपरोक्त उदाहरण को fgets()
के साथ विस्तारित करने का प्रयास किया जो मैंने सोचा था कि ऐसा कुछ ऐसा था, लेकिन इन दोनों ने मुझे एक वाक्यविन्यास त्रुटि दी।
fgets(char fpath[80], 80, stdin);
* नोट **
fgets(char* fpath = malloc(80), 80, stdin);
तो, बस जहां वास्तव में चर C99 में घोषित करने के लिए यह कानूनी है देखते हैं? क्या फॉर-लूप उदाहरण नियम के लिए अपवाद था? क्या यह while
और do while
लूप पर भी लागू होता है?
* ध्यान दें **: मैं भी यकीन है कि यह वाक्य रचना सही होगा, भले ही मैं चार सरणी वहाँ की घोषणा कर सकता है fgets()
के बाद से चार की सरणी 80 को नहीं सूचक चार को सूचक की तलाश में है नहीं कर रहा हूँ । यही कारण है कि मैंने malloc()
संस्करण की कोशिश की।
भले ही यह कानूनी है या नहीं, आपको इस तरह के मॉलोक को कभी भी कॉल नहीं करना चाहिए क्योंकि आप यह जांच नहीं रहे हैं कि यह न्यूल लौटता है या नहीं, और न ही आप आवंटित ढेर मेमोरी को मुक्त कर सकते हैं, क्योंकि एफपीएथ तुरंत दायरे से बाहर हो जाता है। – Jeff