bool是一个本地C类型吗?

我注意到,Linux内核代码使用bool,但我认为bool是一个C ++类型。 bool是一个标准的C扩展(例如ISO C90)还是一个GCC扩展?

bool存在于当前的C-C99中,但不存在于C89 / 90中。

在C99中,本地类型实际上称为_Bool ,而bool是在stdbool.h定义的标准库宏(预计会解析为_Bool )。 _Bool类型的对象保存0或1,而truefalse也是stdbool.h宏。

C99添加了一个内置的_Bool数据类型(详见Wikipedia ),如果你包含#include <stdbool.h> ,它将bool作为一个宏提供给_Bool

你特别问了关于Linux内核的问题。 它假定存在_Bool并在include / linux / types.h中提供了一个bool typedef本身。

不,ISO C90没有bool

以下是标准C(不是C99)中的关键字列表:

  • auto
  • break
  • case
  • char
  • const
  • continue
  • default
  • do
  • double
  • else
  • enum
  • extern
  • float
  • for
  • goto
  • if
  • int
  • long
  • register
  • return
  • short
  • signed
  • static
  • struct
  • switch
  • typedef
  • union
  • unsigned
  • void
  • volatile
  • while

这里有一篇文章讨论与内核和标准中使用的C有些不同之处: http : //www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html

C99在stdbool.h中有它,但在C90中它必须被定义为typedef或枚举:

 typedef int bool; #define TRUE 1 #define FALSE 0 bool f = FALSE; if (f) { ... } 

或者:

 typedef enum { FALSE, TRUE } boolean; boolean b = FALSE; if (b) { ... } 
 /* Many years ago, when the earth was still cooling, we used this: */ typedef enum { false = ( 1 == 0 ), true = ( ! false ) } bool; /* It has always worked for me. */ 

_Bool是C99中的关键字:它指定一个类型,就像intdouble

6.5.2

2声明为_Bool类型的对象足够大,可存储值0和1。

C99在stdbool.h定义了bool, truefalse

在c99中引入了stdbool.h

没有这样的事情,可能只是一个int的宏