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的宏