मुझे अपने उन दिनों से याद है जब हमने कॉलेज में 8086 विधानसभा की थी, ऐसा करने के लिए और अधिक प्रदर्शन किया था:
for (int i = 6; i > -1; i--)
जैसा कि वहाँ था JNS ऑपरेशन था जिसका मतलब है कि जंप अगर नो साइन। इसका उपयोग करने का मतलब यह था कि तुलना मूल्य प्राप्त करने के लिए प्रत्येक चक्र के बाद कोई मेमोरी लुकअप नहीं था और इसकी तुलना भी नहीं थी। इन दिनों अधिकांश कंपाइलर रजिस्टर उपयोग का अनुकूलन करते हैं, इसलिए मेमोरी चीज़ अब महत्वपूर्ण नहीं है, लेकिन आपको अभी भी एक गैर-आवश्यक तुलना मिलती है।
वैसे अपने पाश में 7 या 6 डालने से एक " जादू नंबर " शुरू हो रहा है। बेहतर पठनीयता के लिए आपको एक इरादे का खुलासा नाम के साथ एक निरंतर का उपयोग करना चाहिए। ऐशे ही:
const int NUMBER_OF_CARS = 7;
for (int i = 0; i < NUMBER_OF_CARS; i++)
संपादित करें: लोगों को विधानसभा की चीज़ नहीं मिल रही है इसलिए पूरी तरह से उदाहरण की आवश्यकता है:
यदि हम ऐसा करते हैं (i = 0; मैं <= 10; i ++) आपको यह करने की आवश्यकता है:
mov esi, 0
loopStartLabel:
; Do some stuff
inc esi
; Note cmp command on next line
cmp esi, 10
jle exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
अगर हम करते हैं (int i = 10; i> -1; i--) तो आप इससे दूर हो सकते हैं:
mov esi, 10
loopStartLabel:
; Do some stuff
dec esi
; Note no cmp command on next line
jns exitLoopLabel
jmp loopStartLabel
exitLoopLabel:
मैंने अभी-अभी जाँच की है और Microsoft का C ++ कंपाइलर यह अनुकूलन नहीं करता है, लेकिन यदि आप ऐसा करते हैं:
for (int i = 10; i >= 0; i--)
तो नैतिक है अगर आप Microsoft C ++ Microsoft का उपयोग कर रहे हैं, और आरोही या अवरोही को कोई फर्क नहीं पड़ता है, तो एक त्वरित लूप प्राप्त करने के लिए जिसे आपको उपयोग करना चाहिए:
for (int i = 10; i >= 0; i--)
इन दोनों के बजाय:
for (int i = 10; i > -1; i--)
for (int i = 0; i <= 10; i++)
लेकिन स्पष्ट रूप से "for (int i = 0; i <= 10; i ++)" की पठनीयता आमतौर पर एक प्रोसेसर कमांड को याद करने से कहीं अधिक महत्वपूर्ण है।
† अन्य संकलक अलग-अलग काम कर सकते हैं।