Mengenai jenis boolean di C
Tipe boolean diperkenalkan cukup terlambat dalam bahasa C, pada tahun 1999. Sebelum itu, C tidak memiliki tipe boolean tetapi sebaliknya digunakan intuntuk semua ekspresi boolean. Oleh karena itu semua operator logis seperti > == !dll mengembalikan intnilai 1atau 0.
Itu adalah kebiasaan untuk aplikasi untuk menggunakan jenis buatan seperti typedef enum { FALSE, TRUE } BOOL;, yang juga bermuara pada intjenis -sized.
C ++ memiliki tipe boolean yang jauh lebih baik, dan eksplisit bool, yang tidak lebih besar dari 1 byte. Sedangkan tipe atau ekspresi boolean dalam C akan berakhir sebagai 4 byte dalam kasus terburuk. Beberapa cara kompatibilitas dengan C ++ diperkenalkan di C dengan standar C99. C kemudian mendapat tipe boolean _Booldan juga header stdbool.h.
stdbool.hmenyediakan beberapa kompatibilitas dengan C ++. Header ini mendefinisikan makro bool(ejaan yang sama dengan kata kunci C ++) yang diperluas ke _Bool, tipe yang merupakan tipe integer kecil, kemungkinan besar 1 byte. Demikian pula, tajuk menyediakan dua makro truedan false, ejaan yang sama dengan kata kunci C ++, tetapi dengan kompatibilitas ke belakang untuk program C yang lebih tua . Oleh karena itu truedan falseberkembang ke 1dan 0di C dan tipenya int. Makro ini sebenarnya bukan tipe boolean seperti kata kunci C ++ yang sesuai.
Demikian pula, untuk tujuan kompatibilitas ke belakang, operator logis di C masih kembali intke hari ini, meskipun C saat ini mendapat tipe boolean. Sementara di C ++, operator logis mengembalikan a bool. Dengan demikian ekspresi seperti sizeof(a == b)akan memberikan ukuran intdalam C, tetapi ukuran dari booldalam C ++.
Mengenai operator bersyarat ?:
Operator bersyarat ?:adalah operator aneh dengan beberapa keanehan. Ini adalah kesalahan umum untuk percaya bahwa itu 100% setara dengan if() { } else {}. Tidak terlalu.
Ada titik urutan antara evaluasi operan 1 dan 2 atau 3. The ?:Operator dijamin hanya mengevaluasi baik 2 atau operan-3, sehingga tidak dapat menjalankan efek samping dari operan yang tidak dievaluasi. Kode suka true? func1() : func2()tidak akan dieksekusi func2(). Sejauh ini baik.
Namun , ada aturan khusus yang menyatakan bahwa operan ke-2 dan ke-3 harus secara implisit dipromosikan dan diseimbangkan satu sama lain dengan konversi aritmatika yang biasa . ( Aturan promosi tipe implisit dalam C dijelaskan di sini ). Ini berarti bahwa operan ke-2 atau ke-3 akan selalu setidaknya sebesar int.
Jadi tidak masalah itu truedan falsekebetulan mengetikkan intC karena ungkapan itu akan selalu memberikan setidaknya ukuran suatu intmasalah.
Bahkan jika Anda akan menulis ulang ekspresi itu masih akan mengembalikan ukuran sebuah !sizeof(a ? (bool)true : (bool)false) int
Ini karena jenis promosi implisit melalui konversi aritmatika yang biasa.
sizeof(true)dansizeof(false)juga 4: ide.geeksforgeeks.org/O5jvuN