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


当前回答

typedef enum {
    false = 0,
    true
} t_bool;

其他回答

从好到坏:

选项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!

如果条件表达式为非零,则认为它们为真,但C标准要求逻辑运算符本身返回0或1。

@汤姆:#定义正确!FALSE是糟糕的,完全没有意义。如果头文件进入编译的C++代码,那么它可能会导致问题:

void foo(bool flag);

...

int flag = TRUE;
foo(flag);

某些编译器会生成关于int=>bool转换的警告。有时人们会通过以下方式避免这种情况:

foo(flag == TRUE);

以强制表达式为C++布尔值。但如果你#定义TRUE!如果为FALSE,则结果为:

foo(flag == !0);

它最终会进行int到bool的比较,这无论如何都会触发警告。

可以使用_Bool,但返回值必须是整数(1表示真,0表示假)。但是,建议在C++中包含和使用bool,如中所述这个来自daniweb论坛的回答,以及来自另一个stackoverflow问题的回答:

_布尔:C99的布尔类型。只有在维护已经为Bool、true或false定义宏的遗留代码时,才建议直接使用_Bool。否则,这些宏将在标题中标准化。包含该标头,您可以像在C++中一样使用bool。

这是我使用的:

enum {false, true};
typedef _Bool bool;

_Bool是C语言中的内置类型,用于布尔值。

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

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