Rumah > pembangunan bahagian belakang > C++ > Adakah Penukaran `bool` kepada `int` Sentiasa Berkelakuan Boleh Diramal dalam C dan C99?

Adakah Penukaran `bool` kepada `int` Sentiasa Berkelakuan Boleh Diramal dalam C dan C99?

Mary-Kate Olsen
Lepaskan: 2024-12-16 16:07:17
asal
545 orang telah melayarinya

Will `bool` to `int` Conversions Always Behave Predictably in C   and C99?

Penukaran Bool to Int: Kemudahalihan dan Penegasan

Dalam C dan juga dalam C99, pembangun sering memanfaatkan penukaran tersirat daripada nilai boolean (bool) kepada integer (int) . Walau bagaimanapun, adalah penting untuk memahami kemudahalihan dan implikasi penukaran ini untuk memastikan ketepatan kod.

Pertimbangkan coretan kod berikut:

int x = 4 < 5;
assert(x == 1);

x = 4 > 5;
assert(x == 0);
Salin selepas log masuk

Apakah output yang dijangkakan bagi pernyataan ini? Adakah ia dijamin lulus dalam semua konteks?

Kemudahalihan Penukaran Bool kepada Int

Penukaran tersirat daripada bool kepada int ditakrifkan dalam standard C:

  • Untuk bool, "false" menukar kepada 0, manakala "true" menukar kepada 1.
  • Untuk C99, apabila _Bool menggantikan bool dan true/false adalah makro, peraturan penukaran yang sama digunakan.

Penukaran ini mudah alih sepenuhnya dan menjamin kelakuan yang betul merentas semua penyusun yang mematuhi .

Penilaian Penegasan

Berasaskan pada peraturan penukaran, kita boleh menilai dakwaan:

  • 4 < 5 menilai kepada benar, yang menukar kepada 1. Oleh itu, x == 1 kekal.
  • 4 > 5 menilai kepada palsu, yang menukar kepada 0. Oleh itu, x == 0 kekal.

Kesimpulan

Dalam konteks kod yang disediakan, penegasan akan lulus kerana penukaran bool kepada int dilakukan secara tersirat dan nilai yang dijangkakan (1 untuk "benar" dan 0 untuk "salah") diberikan dengan betul. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa gelagat ini tidak terhad kepada coretan kod yang dibentangkan dan meluas ke mana-mana situasi di mana penukaran sedemikian digunakan.

Atas ialah kandungan terperinci Adakah Penukaran `bool` kepada `int` Sentiasa Berkelakuan Boleh Diramal dalam C dan C99?. 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