2017-12-14 1 views
5
#include <stdio.h> 
int main() 
{ 
    int i; 
    for (i=0; i<5; i++) 
    { 
     int i = 10; 
     printf ("%d", i); 
     i++; 
    } 
return 0; 
} 

के लिए घोषणाओं इस चर i में for पाश बाहर घोषित किया जाता है और इसे फिर से की घोषणा की और for पाश अंदर आरंभ नहीं हो जाता। सी कई घोषणाओं की अनुमति कैसे देता है?एकाधिक अंदर और बाहर चर का एक ही पाश

+4

भले ही आपके पास 'int (int i = 0; i <5; i ++)' अगली 'i' के पास घोंसला है। लेकिन मुझे यह पसंद नहीं है, भाषा सुविधा का उपयोग वैरिएबल नामों को रीसायकल करने के लिए नहीं किया जाना है। हमेशा रचनात्मक परिवर्तनीय नामों का उपयोग करें जो संघर्ष या छाया नहीं करते हैं। –

+1

_inner स्कोप/बाहरी स्कोप_ सी 11 §6.2.1 4 – chux

उत्तर

5

लूप के बाहर i लूप के अंदर iदो अलग-अलग चर हैं।

  • बाहरी imain की पूरी अवधि के लिए रहना होगा।

  • आंतरिक i केवल एक लूप पुनरावृत्ति की अवधि के लिए ही रहेगा।

भीतरी एक shadows इस दायरे में बाहरी एक:

{ 
    int i = 10; 
    printf ("%d", i); 
    i++; 
} 

कारण नियम पीछा करने के लिए है, यह बाहरी एक का उल्लेख करना असंभव है, जबकि ऊपर उल्लिखित दायरे के अंदर।


ध्यान दें कि यह एक ही दायरे में एक ही नाम साथ दो चर घोषित करने के लिए असंभव है: एक दायरे में

{ 
    int i = 0; 
    int i = 1; // compile-time error 
} 
+1

एफवाईआई देखें, सी मानक उपयोग की शब्दावली "छाया" के बजाय "छिपी हुई" है। –

3

चर एक उच्च दायरे में चर मुखौटा कर सकते हैं।

इस उदाहरण में, i लूप मास्क के अंदर परिभाषित i बाहर परिभाषित किया गया है। पाश शरीर में, printf भीतरी i का मूल्य है, जो आंतरिक है 10 i++ तब 11.

के लिए यह सेट करते समय पाश नीचे हिट भीतरी i पर फिर से चल रही है और वापस ऊपर चला जाता है, प्रिंट i गुंजाइश से बाहर चला जाता है। for के दूसरे और तीसरे खंड बाहरी i पर काम करते हैं। जब लूप बॉडी फिर से दर्ज किया जाता है, तो आंतरिक i का एक नया उदाहरण परिभाषित किया जाता है और 10 से शुरू किया जाता है।

+0

एफवाईआई, सी मानक मानक शब्दावली "मुखौटा" के बजाय "छुपाएं" है। " –

1

आपको विभिन्न प्रकार के स्कॉप्स की परिभाषाओं के लिए निम्न पृष्ठ देखना चाहिए जो सी भाषा में चर हो सकते हैं ।

http://aelinik.free.fr/c/ch14.htm

आपका पहला int i पूरे ब्लॉक के दायरे में है, और उस नेस्टेड लूप के भीतर से अपने दूसरे int i गुंजाइश ही नहीं है। एक बार नेस्टेड लूप के बाहर, i का मूल ब्लॉक स्कोप संस्करण फिर से लागू होता है।

संबंधित मुद्दे