2010-01-31 11 views
9

जैसा कि मैं समझता हूं "के लिए (;;)" की कोई प्रारंभिक स्थिति नहीं है, कोई परीक्षण स्थिति नहीं है और कोई वृद्धि स्थिति नहीं है, और इसलिए हमेशा के लिए लूप, मैं उत्सुक हूं कि परीक्षण स्थिति प्रत्येक पाश को क्यों सफल करती है।"(;;)" के लिए टेस्ट हालत क्यों सफल होती है?

खाली अभिव्यक्ति ";" सी में सच के रूप में मूल्यांकन? या यह संकलक द्वारा संभाला गया एक विशेष मामला है?

A similar, but unrelated question

उत्तर

17

यह सी भाषा में for कथन की परिभाषा से है। 6.8.5.3/2 "for कथन":

दोनों खंड -1 और अभिव्यक्ति -3 छोड़े जा सकते हैं। एक छोड़ा गया अभिव्यक्ति -2 को गैरजेरो स्थिर द्वारा प्रतिस्थापित किया गया है।

+0

बिल्कुल सही। धन्यवाद माइकल! : डी – iokevins

+0

वर्तमान ड्राफ्ट सी 99 विनिर्देश का एक लिंक यहां दिया गया है: http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf। फॉर-लूप विनिर्देश पृष्ठ 136 पर है। – iokevins

5

सी भाषा में "खाली अभिव्यक्ति" जैसी कोई चीज़ नहीं है। यदि for कथन से कोई अभिव्यक्ति गुम है, तो सिंटैक्टिक रूप से इसका अर्थ है कि संपूर्ण अभिव्यक्ति छोड़ी गई है, न कि यह वहां है, लेकिन खाली है।

for लूप एक छोड़ी गई दूसरी अभिव्यक्ति लूप के साथ हमेशा के लिए लूप क्योंकि for कथन का विनिर्देश कहता है। अर्थात। यह एक समर्पित विशेषता है जो for अकेली है, कुछ और सामान्य नहीं है।

Additionaly (एक शब्दावली नाइटपिक) केवल दूसरी अभिव्यक्ति वास्तव में स्थिति है। पहला और तीसरा वास्तव में "शर्तें" नहीं हैं।

+0

एंड्रीटी स्पष्टीकरण के लिए धन्यवाद! :) – iokevins

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