C言語の真偽値
C言語の真偽値についての解説です。
C言語の真偽値
C言語では0は偽値で、それ以外が真値です。非常にシンプルです。NULLは、C言語では0と等価として定義されるので、偽値です。
真値 | 0以外 |
---|---|
偽値 | 0 |
if文で真偽値を使ってみましょう。
#include <stdio.h> #include <stdint.h> int main(void) { int32_t flag = 1; // int32_t flag = 0; if (flag) { printf("OK\n"); } else { printf("Not OK\n"); } }
flagが1の時は「OK」、0のときは「Not OK」と表示されます。
NULLも使ってみましょう。
#include <stdio.h> #include <stdint.h> int main(void) { const char* string = "Hello"; // const char* string = NULL; if (string) { printf("OK\n"); } else { printf("Not OK\n"); } }
文字列が代入されているときは「OK」、NULLが代入されているときは「Not OK」と表示されます。
C言語には真偽値型は存在しますか?
C99でstdbool.hが導入され_Bool型が追加されました。
1か0にしかならない型です。
ただし処理系が1bitで実装するということは考えにくく、最低1バイト使うので、汎用的に使えるint8_tでよいかもしれないとも思います。
普段はint32_tを使って、サイズを節約したい場合はint8_tみたいな。
使うかどうかの判断はお任せします。僕の評価は、あってもよいけど、ないならないでよいという感じです。
Perlの真偽値との違いは?
C言語の真偽値はPerlの真偽値と似ています。
C言語では、0が偽値で、それ以外が真です。NULLは、0と等価として定義されているので、偽になります。
Perlでは、数値0, 文字列の0, undef, 空文字列, 空のリストが、偽値で、それ以外は真です。
体感としては真偽値は、PerlとC言語は似た感覚で使えます。