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
Mary-Kate Olsenasal
2024-12-16 16:07:17531semak imbas

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);

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!

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