Mungkin saya bukan dari planet ini, tetapi bagi saya tampaknya hal berikut ini adalah kesalahan sintaksis:
int a[] = {1,2,}; //extra comma in the end
Tapi ternyata tidak. Saya terkejut ketika kode ini dikompilasi pada Visual Studio, tapi saya telah belajar untuk tidak mempercayai MSVC compiler sejauh C ++ aturan yang bersangkutan, jadi aku memeriksa standar dan itu adalah diperbolehkan oleh standar juga. Anda dapat melihat 8.5.1 untuk aturan tata bahasa jika Anda tidak percaya kepada saya.
Kenapa ini diizinkan? Ini mungkin pertanyaan bodoh yang tidak berguna tapi saya ingin Anda mengerti mengapa saya bertanya. Jika itu adalah sub-kasus aturan tata bahasa umum, saya akan mengerti - mereka memutuskan untuk tidak membuat tata bahasa umum lebih sulit hanya untuk melarang koma yang berlebihan pada akhir daftar penginisialisasi. Tapi tidak, koma tambahan diizinkan secara eksplisit . Sebagai contoh, itu tidak diperbolehkan untuk memiliki koma yang berlebihan di akhir daftar argumen fungsi-panggilan (ketika fungsi mengambil ...
), yang normal .
Jadi, sekali lagi, apakah ada alasan khusus koma yang berlebihan ini diizinkan secara eksplisit ?
for()
contoh), menambahkannya melemparkan peringatan kompiler.
if (x = 1)
tidak ambigu dalam tata bahasa, tetapi sangat ambigu bagi manusia, dan dengan demikian melemparkan peringatan.
if
Contoh Anda juga tidak ambigu. Saya tidak berpikir "ambigu" berarti apa yang Anda pikirkan artinya!
;
ketika jelas token berikutnya sebenarnya adalah pernyataan berikutnya.