「はい/いいえ」「オン/オフ」「合格/不合格」。2つに1つの値を扱う型がboolです。C23からは、何の準備もなくそのまま書けます。
C23の書き方
#include <stdio.h>
int main(void) {
bool goukaku = true;
bool kesseki = false;
printf("%d %d\n", goukaku, kesseki);
return 0;
}出力は 1 0。bool・true・false はC23で正式なキーワードになりました。古い記事にある #include <stdbool.h> はもう要りません(書いてもエラーにはなりません)。C99〜C17では型名が _Bool で、stdbool.h が別名を用意していた、という歴史です。
Cにおける真と偽
ルールはとても単純です。
・0 が偽
・0以外はすべて真(1でも -5 でも 3.14 でも真)
#include <stdio.h>
int main(void) {
bool a = 5; // 0以外なので true
bool b = 0; // false
bool c = -1; // これも true
printf("%d %d %d\n", a, b, c);
return 0;
}出力は 1 0 1。bool に入れた値は 0 か 1 に正規化されます。5 を入れても、中身は 1 です。
比較の結果も真偽値
#include <stdio.h>
int main(void) {
int tensuu = 72;
bool goukaku = (tensuu >= 60);
printf("合格判定: %d\n", goukaku);
printf("そのまま : %d\n", tensuu >= 60);
return 0;
}>= や == といった比較演算子の結果は、真なら1、偽なら0です。判定結果をいったん bool の変数にしまっておくと、条件が長くなったときにコードが読みやすくなります(条件分岐そのものはトラック6で扱います)。
罠・注意
表示は 1 / 0。 %d で出しても true や false という文字は出ません。文字で出したいなら自分で切り替えます。
bool に入れると情報が減る。 bool n = 100; は 1 になり、100 は失われます。数として使う値を bool に入れてはいけません。
「真=1」とは限らない。 bool に入れれば1ですが、int のままなら 5 も -1 も真です。if (x == 1) と if (x) は同じではありません。
まとめ
C23では bool / true / false をそのまま書けます(stdbool.h 不要)。0が偽、0以外はすべて真。比較の結果は 1 か 0 で、bool に代入した値は 0/1 に正規化されます。