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

Linda Hamilton
Lepaskan: 2024-10-29 03:02:02
asal
569 orang telah melayarinya

 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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!