C没有任何内置布尔类型。在C语言中使用它们的最佳方式是什么?


当前回答

在布尔运算中,任何非零的值都被计算为真,因此您可以

#define TRUE 1
#define FALSE 0

并使用常数。

其他回答

如果允许您使用C99,这只是对其他答案的补充和一些澄清。

+-------+----------------+-------------------------+--------------------+
|  Name | Characteristic | Dependence in stdbool.h |        Value       |
+-------+----------------+-------------------------+--------------------+
| _Bool |   Native type  |    Don't need header    |                    |
+-------+----------------+-------------------------+--------------------+
|  bool |      Macro     |           Yes           | Translate to _Bool |
+-------+----------------+-------------------------+--------------------+
|  true |      Macro     |           Yes           |   Translate to 1   |
+-------+----------------+-------------------------+--------------------+
| false |      Macro     |           Yes           |   Translate to 0   |
+-------+----------------+-------------------------+--------------------+

我的一些偏好:

_布尔还是布尔?两者都很好,但bool看起来比关键字_bool更好。bool和_bool的接受值为:false或true。指定0或1而不是false或true是有效的,但更难阅读和理解逻辑流。

标准中的一些信息:

_Bool不是无符号整数,而是无符号整数类型组的一部分。它足够大,可以保存值0或1。不要,但是的,你可以重新定义bool true和false,但肯定不是个好主意。这种能力被认为是过时的,将来将被删除。将标量类型(算术类型和指针类型)赋给_Bool或Bool,如果标量值等于0或与0比较,则为0,否则结果为1:_Bool x=9;当分配给x时,9被转换为1。_Bool是1字节(8位),通常程序员会尝试使用其他位,但不建议使用,因为唯一的保证是只使用一位来存储数据,而不是像具有8位可用的类型字符那样。

C中的布尔值是一个整数:假为零,真为非零。

另请参见布尔数据类型,C节,C++,Objective-C,AWK。

这就是:

#define TRUE 1
#define FALSE 0

您可以简单地使用#define指令,如下所示:

#define TRUE 1
#define FALSE 0
#define NOT(arg) (arg == TRUE)? FALSE : TRUE
typedef int bool;

使用方法如下:

bool isVisible = FALSE;
bool isWorking = TRUE;
isVisible = NOT(isVisible);

等等

C有一个布尔类型:bool(至少在过去10(!)年)

包括stdbool.h和true/false将按预期工作。