5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C言語 trueとfalseについて。あとNULLの真偽の扱いについて。

Last updated at Posted at 2020-03-06

##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

5
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?