Belki ben bu gezegenden değilim, ama bana öyle geliyor ki bir sözdizimi hatası olmalı:
int a[] = {1,2,}; //extra comma in the end
Ama değil. Bu kod Visual Studio üzerinde derlenmiş zaman şaşırdı, ama ben standardını kontrol ve uzak C ++ kurallar söz konusu olduğunda, bu nedenle MSVC derleyici güvenmemeyi öğrendim olduğu standardı tarafından izin de. Bana inanmıyorsanız dilbilgisi kuralları için 8.5.1'i görebilirsiniz.
Buna neden izin veriliyor? Bu aptalca bir işe yaramaz soru olabilir ama neden sorduğumu anlamanızı istiyorum. Genel bir dilbilgisi kuralının alt vakası olsaydı, anladım - genel dilbilgisini, bir başlangıç listesinin sonunda gereksiz bir virgüle izin vermemek için daha zor hale getirmeye karar verdiler. Ancak hayır, ek virgüle açıkça izin verilir. Örneğin, (işlevi alan bir fonksiyon çağrısı bağımsız değişken listesinin sonuna fazladan bir virgül izin verilmez ...
), normal .
Peki, yine, bu gereksiz virgülün açıkça izin verilmesinin belirli bir nedeni var mı?
for()
örneğin bir sonra ), eklemek derleyici uyarısı verir.
if (x = 1)
gramerde belirsiz değildir, ancak insanlar için çok belirsizdir ve bu nedenle bir uyarı verir.
if
de belirsiz değil. "Belirsiz" in ne anlama geldiğini düşündüğün anlamına gelmiyorum!
;
sonraki belirteç açık olduğunda neden bir eksiki görmezden gelmiyorlar aslında bir sonraki ifadedir.