Legaliti i = i 1 dalam C 17
C 17 memperkenalkan perubahan halus namun ketara yang menghalalkan ungkapan i = i 1; , yang sebelum ini merupakan tingkah laku yang tidak ditentukan dalam C 11.
Sebelum C 17
Dalam C 11, susunan penilaian ungkapan tugasan ditentukan seperti berikut:
Dalam kes i = i 1;, ini bermakna kesan sampingan penambahan i menggunakan operator postfix boleh berlaku sebelum atau selepas tugasan. Kekurangan penjujukan ini membawa kepada tingkah laku yang tidak ditentukan.
Perubahan dalam C 17
C 17 memperkenalkan ayat tambahan kepada spesifikasi operator tugasan: "Operan yang betul ialah disusun sebelum operan kiri." Penambahan yang kelihatan tidak berbahaya ini mempunyai implikasi yang meluas.
Dengan menyusun RHS sebelum LHS, C 17 kini memastikan bahawa sebarang kesan sampingan dalam RHS dijamin berlaku sebelum tugasan itu sendiri. Ini secara berkesan mengasingkan tindakan tugasan daripada sebarang tingkah laku yang tidak ditentukan yang berpotensi.
Menulis Semula Contoh
Untuk menggambarkan perubahan ini, mari kita pecahkan penilaian i = i 1; dalam C 17:
Pengiraan nilai operan kanan (RHS): i 1
Jujukan RHS sebelum LHS:
Pengiraan nilai operan kiri (LHS): i
Tugasan:
Dengan memastikan semua kesan sampingan dalam RHS mendahului tugasan, C 17 secara muktamad menghapuskan kemungkinan tingkah laku yang tidak ditentukan dalam ungkapan sedemikian.
Atas ialah kandungan terperinci Adakah `i = i 1` Ditakrifkan secara Sah dalam C 17?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!