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,而true
和false
也是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中的关键字:它指定一个类型,就像int
或double
。
6.5.2
2声明为_Bool类型的对象足够大,可存储值0和1。
C99在stdbool.h
定义了bool, true
和false
。
在c99中引入了stdbool.h
没有这样的事情,可能只是一个int的宏