हालांकि लूप के वाक्यविन्यास के अनुसार प्रारंभिक विवरण पहले आना चाहिए, और फिर जांच और फिर अद्यतन, क्योंकि आपका चेकिंग स्टेटमेंट दूसरे उदाहरण में प्रारंभिक है, इसलिए मुझे जांच के हिस्से के रूप में 5 के रूप में प्रारंभ किया गया है और लूप जारी है। के रूप में वापसी प्रकार शून्य है
प्रारंभ में foo() कॉल का उपयोग करते हुए पाश के लिए करने के लिए कोई फर्क नहीं पड़ता, यदि आप foo() के स्थान पर 0 शब्दों में कहें, तो आप एक ही उत्पादन मिल जाएगा
अब आइए पहले उदाहरण पर विचार करें, आपका चेकिंग कथन एक प्रारंभिक उदाहरण है, जैसा कि दूसरे उदाहरण की तरह है, और यदि आपके पास उन ब्रैकेट्स नहीं हैं तो यह काम करेगा। चूंकि एक घोषणा किसी भी मूल्य को वापस नहीं करती है, (int i = 5) कोई मान वापस नहीं करता है और इसलिए "== 5" में 5 के साथ तुलना नहीं की जा सकती है।
हालांकि, अगर आप कोशिश "के लिए (foo(); int i = 5 == 5; ++ i) ...", जाँच बयान पूर्णांक मैं = (5 के रूप में ही संकलित = = 5)। चूंकि 5 == 5 सत्य है, यह 1 का मान देता है, जिसे तब i के मान के रूप में प्रारंभ किया जाता है। इस प्रकार आउटपुट 11111 ......
टीएल; डीआर: चूंकि एक घोषणा किसी भी मूल्य को वापस नहीं करती है, (int i = 5) कोई मान वापस नहीं करता है और इसलिए इसकी तुलना 5 में नहीं की जा सकती है "== 5" जैसा कि पहले उदाहरण में
समस्या हल हो गई।
क्योंकि 'int i = 5' मान्य अभिव्यक्ति नहीं है? और आपको कोष्ठक में एक वैध अभिव्यक्ति की आवश्यकता है। –
भले ही आपका दूसरा प्रोग्राम संकलित हो, फिर भी आपको एक अनंत लूप में मारा जाएगा। यह टर्मिनल पर '5' प्रिंटिंग रखेगा। – abhiarora
चीजों को और भी दिलचस्प बनाता है कि यदि आप 0 से शुरू करते हैं तो यह झूठा होता है। –