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位可用的类型字符那样。
从好到坏:
选项1(C99及更新版本)
#include <stdbool.h>
选项2
typedef enum { false, true } bool;
选项3
typedef int bool;
enum { false, true };
选项4
typedef int bool;
#define true 1
#define false 0
解释
只有当你使用C99(或更高版本)时,选项1才会起作用,这是“标准方式”。如果可能,请选择此选项。选项2、3和4实际上具有相同的行为#2和#3不使用#defines,我认为这更好。
如果你还没有决定,那就选择#1!
您可以使用一个字符或另一个小数字容器。
伪码
#define TRUE 1
#define FALSE 0
char bValue = TRUE;
如果使用C99,则可以使用_Bool类型。不需要#includes。不过,您确实需要将其视为整数,其中1为真,0为假。
然后可以定义TRUE和FALSE。
_Bool this_is_a_Boolean_var = 1;
//or using it with true and false
#define TRUE 1
#define FALSE 0
_Bool var = TRUE;
这是我使用的:
enum {false, true};
typedef _Bool bool;
_Bool是C语言中的内置类型,用于布尔值。