Header <stdbool.h> diperkenalkan di C99 untuk memberikan tipe boolean yang lebih jelas dibanding konvensi klasik int dengan 0/1. Tanpa <stdbool.h>, kita harus menulis int aktif = 1; dan mengandalkan konvensi “nol = false, non-zero = true”. Dengan header ini, kita dapat memakai tipe bool, konstanta true, dan false yang lebih ekspresif—kode menjadi lebih mudah dibaca dan diketik oleh kompiler. Pada chapter ini kita akan meninjau penggunaan bool sebagai tipe variabel, return type fungsi, dan field struct.
Dasar: bool, true, false #
Tipe bool di <stdbool.h> adalah alias makro untuk _Bool—tipe bawaan C99 yang hanya menyimpan dua nilai: 0 dan 1. Makro true dan false di-expand ke 1 dan 0. Konstanta non-zero apa pun yang ditugaskan ke bool otomatis dikonversi menjadi 1.
#include <stdio.h>
#include <stdbool.h>
/* Fungsi yang mengembalikan bool */
static bool genap(int n) {
return n % 2 == 0;
}
int main(void) {
/* Tanpa stdbool.h, kita harus memakai int dan 0/1 */
bool aktif = true;
bool selesai = false;
bool kosong = false;
printf("aktif = %d (true)\n", aktif);
printf("selesai = %d (false)\n", selesai);
/* Bool berperilaku seperti int 0 atau 1 */
int total = aktif + selesai + kosong;
printf("aktif + selesai + kosong = %d\n", total);
/* Pakai bool sebagai return value fungsi */
int data[] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("%d genap? %s\n", data[i], genap(data[i]) ? "ya" : "tidak");
}
/* Demonstrasikan: bool hanya menyimpan 0 atau 1 */
bool x = 5; /* nilai non-zero dikonversi ke 1 */
printf("\nbool x = 5; -> x = %d\n", x);
x = -100;
printf("bool x = -100; -> x = %d\n", x);
return 0;
}Output yang Dihasilkan:
aktif = 1 (true)
selesai = 0 (false)
aktif + selesai + kosong = 1
1 genap? tidak
2 genap? ya
3 genap? tidak
4 genap? ya
5 genap? tidak
bool x = 5; -> x = 1
bool x = -100; -> x = 1Mari kita telaah baris-baris kode di atas:
- Baris 5 (
static bool genap(int n)): return typeboolmembuat signature fungsi mendokumentasikan diri sendiri—pembaca langsung tahu fungsi mengembalikan nilai kebenaran, bukan angka. - Baris 11-13 (
bool aktif = true; ...): penggunaantrue/falselebih jelas daripada literal1/0. Pembaca tidak perlu mengingat konvensi “0 = false”. - Baris 19 (
int total = aktif + selesai + kosong;):boolberpartisipasi dalam aritmatika sebagaiint0 atau 1—totalmenjadi jumlah variabel true. Pola ini sering dipakai untuk counting. - Baris 27 (
bool x = 5;): nilai5(non-zero) otomatis dikonversi ke1saat disimpan kebool. Konversi yang sama berlaku untuk-100—apa pun non-zero menjadi1. Konversi ini mengikuti aturan boolean conversion di C. - Baris 23 (
genap(data[i]) ? "ya" : "tidak"):boolbekerja sempurna dengan operator?:. Bilagenap()mengembalikantrue, ekspresi menghasilkan"ya".
bool sebagai Field Struct: State Machine Boolean #
Penggunaan paling jelas bool adalah sebagai flag di struct yang merepresentasikan state. Bandingkan kejelasan bool login; dibanding int login;—pembaca langsung tahu bahwa field hanya menyimpan true/false.
#include <stdio.h>
#include <stdbool.h>
/* Boolean flags untuk state machine */
typedef struct {
bool login;
bool admin;
bool verifikasi_email;
bool akun_aktif;
} user_state;
/* Cek apakah user boleh akses dashboard admin */
static bool boleh_akses_admin(const user_state *s) {
return s->login && s->admin && s->verifikasi_email && s->akun_aktif;
}
int main(void) {
user_state u1 = { true, true, true, true };
user_state u2 = { true, true, false, true }; /* email belum verifikasi */
user_state u3 = { false, false, false, false }; /* guest */
printf("User 1 boleh akses admin? %s\n", boleh_akses_admin(&u1) ? "ya" : "tidak");
printf("User 2 boleh akses admin? %s\n", boleh_akses_admin(&u2) ? "ya" : "tidak");
printf("User 3 boleh akses admin? %s\n", boleh_akses_admin(&u3) ? "ya" : "tidak");
/* Negasi boolean dengan operator ! */
bool tidak_login = !u3.login;
printf("\nu3.login = %d, !u3.login = %d\n", u3.login, tidak_login);
return 0;
}Output yang Dihasilkan:
User 1 boleh akses admin? ya
User 2 boleh akses admin? tidak
User 3 boleh akses admin? tidak
u3.login = 0, !u3.login = 1Fungsi boleh_akses_admin mengembalikan hasil AND logis dari empat flag. Operator && di C melakukan short-circuit evaluation: bila s->login false, ekspresi sisanya tidak dievaluasi. Return type bool membuat signature jelas—pemanggil tahu fungsi mengembalikan keputusan ya/tidak. Pengguna struct initializer { true, true, true, true } mengisi field berurutan: login=true, admin=true, verifikasi_email=true, akun_aktif=true. User 2 gagal karena verifikasi_email=false—pola AND akan mengembalikan false bila ada satu saja false.