शायद मैं इस ग्रह से नहीं हूं, लेकिन यह मुझे प्रतीत होगा कि निम्नलिखित एक वाक्यविन्यास त्रुटि होनी चाहिए:
int a[] = {1,2,}; //extra comma in the end
लेकिन ऐसा नहीं है। जब विजुअल स्टूडियो पर इस कोड को संकलित किया गया तो मुझे आश्चर्य हुआ, लेकिन मैंने सीख लिया है कि जहां तक C ++ नियमों का सवाल है, वे MSVC कंपाइलर पर भरोसा नहीं करते हैं, इसलिए मैंने मानक की जाँच की और यह मानक द्वारा भी अनुमति है। यदि आप मुझ पर विश्वास नहीं करते हैं, तो आप व्याकरण के नियमों के लिए 8.5.1 देख सकते हैं।
इसकी अनुमति क्यों है? यह एक मूर्खतापूर्ण बेकार सवाल हो सकता है लेकिन मैं चाहता हूं कि आप समझें कि मैं क्यों पूछ रहा हूं। यदि यह एक सामान्य व्याकरण के नियम का उप-मामला होता, तो मैं समझ सकता हूं - उन्होंने एक प्रारंभिक सूची के अंत में एक अनावश्यक अल्पविराम को अस्वीकार करने के लिए सामान्य व्याकरण को और अधिक कठिन नहीं बनाने का फैसला किया। लेकिन नहीं, अतिरिक्त अल्पविराम को स्पष्ट रूप से अनुमति दी गई है। उदाहरण के लिए, इसे फ़ंक्शन-कॉल तर्क सूची (जब फ़ंक्शन लेता है ...
) के अंत में एक अनावश्यक अल्पविराम रखने की अनुमति नहीं है , जो सामान्य है ।
तो, क्या फिर से, कोई विशेष कारण यह अनावश्यक अल्पविराम स्पष्ट रूप से अनुमति है?
for()
उदाहरण के लिए), इसे जोड़ने पर एक संकलक चेतावनी फेंकता है।
if (x = 1)
व्याकरण में अस्पष्ट नहीं है, लेकिन यह मनुष्यों के लिए बहुत अस्पष्ट है, और इस तरह एक चेतावनी फेंकता है।
if
उदाहरण अस्पष्ट नहीं है। मुझे नहीं लगता कि "अस्पष्ट" का अर्थ है कि आप क्या सोचते हैं इसका मतलब है!
;
जब यह स्पष्ट है कि टोकन वास्तव में एक अगला बयान है।