2010-07-06 35 views
10

के लिए में चर आरंभ मैं बसघोषणा और पाश

for (int i = 0; ... 

बजाय

int i; 
for (i = 0; ... 

की सी या सी ++ में लिख सकते हैं?

(और चर i पाश केवल? अंदर पहुँचा जा सकेगा)

+5

इस बाहर की कोशिश कर रहा बदल जाएगा मूल्य शायद आवश्यकता रही होगी कम प्रयास के अंदर प्रारंभ हो जाएगा इस प्रश्न को –

+3

@ डॉन के बारे में पोस्ट करने से पहले: लेकिन अगर आप क्रिस्टी पुराने प्री-स्टैंडर्ड कंपाइलर (जैसे कुछ लोग अभी भी प्रतीत होते हैं) का उपयोग करना गलत जवाब देंगे। अपने विशेष कंपाइलर के व्यवहार पर भरोसा करने के बजाय पूछना बेहतर है, या मानक में देखें। –

उत्तर

20

C++

इसका मान्य यह सी
के मूल संस्करण में कानूनी नहीं था लेकिन C99 में
सी के भाग के रूप में अपनाया गया था (जब कुछ सी ++ सुविधाओं प्रकार के पीछे सी में पोर्ट थे) का उपयोग करना जीसीसी

gcc -std=c99 <file>.c 

वैरिएबल के लिए मान्य है और कथन जो कि लूप हो गया है। यदि यह एक ब्लॉक स्टेटमेंट है तो यह पूरे ब्लॉक के लिए मान्य है।

for(int loop = 0; loop < 10; ++loop) 
{ 
    // loop valid in here aswell 
} 

// loop NOT valid here. 
2

हाँ और हाँ। लेकिन सी के लिए, जाहिर है कि आपके कंपाइलर को सी 99 मोड में होना चाहिए।

18

हां, यह सी ++ और सी 99 में कानूनी है।

5

यह C99 या सी में यह करने के लिए पूरी तरह से कानूनी है ++:

for(int i=0; i<max; ++i) 
{ 
    //some code 
} 

और उसके while बराबर है:

{ 
    int i=0 
    while(i<max) 
    { 
     //some code 
     ++i; 
    } 
} 
+3

'के लिए 'और' जबकि 'लूप काफी समकक्ष नहीं हैं। विचार करें कि क्या होता है यदि "कुछ कोड" में 'जारी रखें' कथन शामिल है। – jamesdlin

+4

मैं केवल 'i' के दायरे को स्पष्ट कर रहा था। आप हमेशा ध्यान रख सकते हैं कि 'जारी रखें' कॉल करने से पहले '++ i'' है, लेकिन अन्यथा, आपके पास एक वैध बिंदु है। – rubenvb

3

Acutally for(int i=0;i<somevalue;i++) हमेशा के लिए पसंदीदा तरीका के रूप में मेरे में drilled किया गया था सी और सी ++ में लूप के लिए एक परिभाषित करें।

जहां तक ​​"i" केवल आपके लूप में पहुंच योग्य है, आपको अपने द्वारा उपयोग किए जाने वाले वेरिएबल नामों पर ध्यान रखना होगा। यदि आप लूप के बाहर एक चर के रूप में "i" घोषित करते हैं और किसी अन्य चीज़ के लिए इसका उपयोग कर रहे हैं तो लूप काउंटर के लिए उसी वैरिएबल का उपयोग करते समय आप समस्या का कारण बनेंगे।

उदाहरण के लिए: जब आप पाश के लिए मारा

int i = 10; 
i = 10 + PI; 

स्वचालित रूप से बदल जाएगा और मैं घोषित = 0

2

मैं बस

लिख सकते हैं हाँ।

(और इच्छा चर मैं केवल पाश अंदर सुलभ हो?)

संकलक और उसके 'संस्करण पर निर्भर करता है। AFAIK, आधुनिक कंपाइलर्स में मैं केवल लूप के अंदर पहुंच योग्य है। कुछ पुराने कंपाइलर्स ने मुझे लूप के बाहर भी पहुंचने की इजाजत दी। कुछ कंपाइलर मुझे लूप के बाहर एक्सेस करने की अनुमति देते हैं और आपको गैर-मानक व्यवहार के बारे में चेतावनी देते हैं।

मुझे लगता है कि (लेकिन मैं इसके बारे में यकीन नहीं है), कि "मैं बाहर पाश की" VC98 (विजुअल स्टूडियो 6, जो AFAIK, यह भी कहीं न कहीं एक विश्व स्तर पर परिभाषित "मैं" चर था में कहीं इस्तेमाल किया गया था जो एक बेहद दिलचस्प व्यवहार का कारण बन सकता है)। I लगता है कि (माइक्रोसॉफ्ट) कंपाइलर्स लगभग 2000 के आसपास कहीं भी बने ..2003 ने मुझे लूप के बाहर उपयोग करने के लिए "गैर मानक एक्सटेंशन का उपयोग" प्रिंट करना शुरू किया, और अंत में यह कार्यक्षमता पूरी तरह से गायब हो गई। यह विजुअल स्टूडियो 2008 में मौजूद नहीं है।

शायद यह एक मानक के अनुसार हुआ है लेकिन मैं इस समय एक लिंक या उद्धरण नहीं दे सकता।

0

अगर आप चर बाहर की ओर पाश का उपयोग यह हर बार बदल जब आप इसे पाश

int i = 0; 
for(int e = 0; e < 10; e++) 
{ 
i = e; 
} 

अब मैं हर बार