Anda mencampurkan banyak hal yang berbeda: pernyataan kontrol, operator, dan tipe boolean. Masing-masing memiliki aturannya sendiri.
Pernyataan kontrol berfungsi seperti misalnya ifpernyataan, C11 6.4.8.1:
Dalam kedua bentuk, substatement pertama dijalankan jika ekspresi tidak sama dengan 0.
while, fordll memiliki aturan yang sama. Ini tidak ada hubungannya dengan "benar" atau "salah".
Adapun operator yang seharusnya menghasilkan hasil boolean, mereka sebenarnya menghasilkan intdengan nilai 1 atau 0. Sebagai contoh operator persamaan, C11 6.5.9:
Masing-masing operator menghasilkan 1 jika relasi yang ditentukan benar dan 0 jika salah
Semua hal di atas adalah karena C tidak memiliki tipe boolean sampai tahun 1999, dan bahkan ketika sudah mendapatkannya, aturan di atas tidak berubah. Jadi tidak seperti kebanyakan bahasa pemrograman lain di mana pernyataan dan operator menghasilkan tipe boolean (seperti C ++ dan Java), mereka hanya menghasilkan int, dengan nilai nol atau bukan nol. Misalnya, sizeof(1==1)akan memberikan 4 di C tetapi 1 di C ++.
Tipe boolean sebenarnya di C diberi nama _Booldan membutuhkan kompiler modern. Header stdbool.hmendefinisikan makro bool, truedan false, yang diperluas menjadi _Bool, 1dan 0masing - masing (untuk kompatibilitas dengan C ++).
Namun hal ini dianggap sebagai praktik pemrograman yang baik untuk memperlakukan pernyataan kontrol dan operator seolah-olah mereka benar-benar membutuhkan / menghasilkan tipe boolean. Standar pengkodean tertentu seperti MISRA-C merekomendasikan praktik semacam itu. Itu adalah:
if(ptr == NULL) dari pada if(ptr) .
if((data & mask) != 0) dari pada if(data & mask) .
Tujuan dari gaya tersebut adalah untuk meningkatkan keamanan tipe dengan bantuan alat analisis statis, yang pada gilirannya mengurangi bug. Bisa dibilang, gaya ini hanya bermakna jika Anda memang menggunakan penganalisis statis. Meskipun dalam beberapa kasus, ini mengarah ke kode yang lebih mudah dibaca dan terdokumentasi sendiri, misalnya
if(c == '\0')
Bagus, maksudnya jelas, kodenya mendokumentasikan sendiri.
melawan
if(c)
Buruk. Bisa berarti apa saja, dan kita harus mencari tipe cuntuk memahami kodenya. Apakah itu bilangan bulat, penunjuk atau karakter?