想必很多初学者都曾遇到过在C程序中编写bool类型变量结果编译报错的情况吧?
我们知道在C++里有专门的bool类型,用来表示真或假。但是在C语言里没有这样的类型(我一直这么认为),表达式的值0为假,非0为真。所以条件判断语句非常灵活,甚至一个指针类型都可以是条件表达式。
为了使程序更清晰,我们常常会给出如下的宏定义:
typedef int BOOL;
#define TRUE 1
#define FALSE 0
这是最常见的写法,能被任何C语言编译器认可。
今天我在一段程序里看见这么一行 #include <stdbool.h>,这个陌生的头文件还以std打头而且还和bool有关,引起了我的警觉,立刻百度之。得知这是C99标准新增的头文件,意在引入bool类型,使之和C++兼容。随后我看了一下这个头文件的源代码,内容如下:
/*
* ISO C Standard: 7.16 Boolean type and values <stdbool.h>
*/
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting <stdbool.h> in C++ is a GCC extension. */
#define _Bool bool
#defi