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言語は似た感覚で使えます。
C言語ゼミ


