Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah `i = i 1` Ditakrifkan secara Sah dalam C 17?

Adakah `i = i 1` Ditakrifkan secara Sah dalam C 17?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 03:02:02570semak imbas

 Is `i = i     1`  Legally Defined in C  17?

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:

  • Pengiraan nilai operan kanan dan kiri disusun sebelum tugasan sebenar.
  • Walau bagaimanapun, tiada keperluan penjujukan khusus antara tugasan itu sendiri dan kemungkinan kesan sampingan di sebelah kanan ( RHS).

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:

  1. Pengiraan nilai operan kanan (RHS): i 1

    • Tambahan i menggunakan postfix (kesan sampingan).
    • Tambahkan 1 pada nilai yang ditambah.
  2. Jujukan RHS sebelum LHS:

    • Semua kesan sampingan dalam RHS (termasuk kenaikan) berlaku .
  3. Pengiraan nilai operan kiri (LHS): i

    • Nilai semasa i digunakan.
  4. Tugasan:

    • Serahkan hasil RHS kepada LHS.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn