कोई बात नहीं। सब के बाद, भाषा विनिर्देश कहते हैं ($ 6.5.3/2),
या तो या हालत और अभिव्यक्ति की दोनों छोड़ा जा सकता है। ए गायब स्थिति को अंतर्निहित करती है जबकि धारा के बराबर होती है जबकि (सत्य)।
तो for (; ;)
भी मानक के अनुसार while(true)
के बराबर है। इसलिए, मुझे कोई कारण नहीं दिख रहा है कि संकलक को एक मामले में चेतावनी क्यों देनी चाहिए, लेकिन दूसरे में नहीं!
-
संकलक चेतावनी दे करने का फैसला करता है, तो मेरी राय में, संकलक चेतावनी जब हालत लापता के रूप में जब यह मौजूद है, तो यह है कि चेतावनी के रूप में व्याख्या की जाएगी करने का विरोध किया है देना चाहिए प्रोग्रामर के लिए संकेत प्रोग्रामर के लिए इरादे स्पष्ट रूप से और स्पष्ट रूप से का उल्लेख करने के लिए।
मेरा मतलब है, for (;;)
अधिक स्पष्टfor (;true;)
में हालत का उल्लेख की तुलना में एक टाइपो होने की संभावना है। उत्तरार्द्ध प्रोग्रामर के स्पष्ट और स्पष्ट इरादे को बताता है। स्टीव टिप्पणी में कहते हैं:
एक पूर्णांक मूल्य y के लिए, चार एक्स = y बराबर चार के लिए एक्स = (चार) y है, लेकिन आप एक अंतर्निहित संकुचन पर रूपांतरण के लिए एक चेतावनी चाहते हो सकता है पहले लेकिन दूसरा नहीं।
तो स्पष्ट इरादे को चेतावनी नहीं मिलनी चाहिए, जबकि निहित इरादा प्राप्त करना चाहिए!
क्योंकि तीसरे कथन में कोई सशर्त अभिव्यक्ति नहीं है ... जबकि यह दूसरे और तीसरे में है .... कंपाइलर बिना किसी के सशर्त अभिव्यक्ति के बारे में चेतावनी कैसे उत्पन्न कर सकता है? –
मैं आमतौर पर '#pragma चेतावनी' के साथ C4127 को अक्षम कर देता हूं, खासकर जब बूस्ट का उपयोग करता हूं। –
संबंधित: http://stackoverflow.com/questions/224421/constant-value-in-conditional-expression – CesarB