测试环境:
(win10下的wsl Ubuntu20.04):
Linux BDJS-PF3SV6WQ 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
bool类型定义的文件stdbool.h:
/usr/lib/gcc/x86_64-linux-gnu/9/include/stdbool.h
/*
* ISO C Standard: 7.16 Boolean type and values <stdbool.h>
*/
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus // 如果不是c++的环境下,使用_Bool
#define bool _Bool // 此处使用了_Bool,
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting _Bool in C++ is a GCC extension. */
#define _Bool bool // 如果在c++的环境下,将_Bool重新定义为c++的bool
#if __cplusplus < 201103L
/* Defining these macros in C++98 is a GCC extension. */
#define bool bool
#define false false
#define true true
#endif
#endif /* __cplusplus */
/* Signal that all the definitions are present. */
#define __bool_true_false_are_defined 1
#endif /* stdbool.h */
在网上看了一些博客说是,从C99开始为了兼容C和C++,C语言引入了stdbool.h。
但是很多提供C语言接口的供应商,为了避免C语言bool的尴尬出现,鉴于系统的兼容性还是定义了BOOL宏定义。