📦 変数・型・演算子
🎯 C23のbool/true/falseをそのまま使い、Cにおける真偽(0が偽・0以外が真)を説明できる
「はい/いいえ」「オン/オフ」「合格/不合格」。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 に正規化されます。
true(真)かfalse(偽)のどちらかしか入らない型のこと。C23では標準の書き方としてbool・true・falseがそのまま使えるようになった。従来は0と1で真偽を表していたが、C23の書き方の方が意図が伝わりやすい。
+や-、==など、値どうしを計算したり比較したりするための記号のこと。演算子ごとに計算される優先順位があらかじめ決まっている。+ - * / のような算術演算子のほか、比較や論理の演算子も含まれる。
変数に入れられる値の種類と、確保するメモリの大きさを決める分類のこと。箱の形や大きさを決めるルールのようなものだと考えるとよい。int・double・charなど、C言語にはあらかじめ複数の型が用意されている。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。