##C言語において、bool型はない。
__int型の0__のみが偽となり、それ以外が全て真として扱われる。
- 偽
- __int型の0__のみ
- 真
- __偽以外__のすべて
※他の言語でbool型定義されているのはコードの可読性を上げるためです。あくまで__人間のための型__なんですね。c99からは、ライブラリによってtrue, falseが定義されていますが、マクロで置き換えているだけで本質的にintであることに変わりはありません。
##では、NULLはどういう扱いになるのか。
NULLはヘッダファイルによって下記のように定義された定数であり、コンパイル時にマクロによって置き換え処理がされている。
#define NULL ((void*)0)
つまりNULLは__void型__によってキャストされた値0のことである。
文法的には、int型の0ではないので、厳密な意味で偽(=0)として使えるわけではないが、多くコンパイラでは偽としても使える。
(ビットフィールドがすべて0であるから)
NULLというマクロが定義されているのは、以下のヘッダファイル
- stddef.h
- stdio.h
- stdlib.h
- string.h
- time.h
- locale.h
- wchar.h
###参考
C言語関数辞典 - C言語用語集 空ポインタ(null pointer)
http://www.c-tipsref.com/words/null_pointer.html
言語別、if文でtrue(真)/false(偽)になる場合 | kamotora
https://kamotora.net/system/true-of-false/
NULL と '\0' の違い
http://www.kis-lab.com/serikashiki/C/C01.html