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


当前回答

如果条件表达式为非零,则认为它们为真,但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的比较,这无论如何都会触发警告。

其他回答

您可以使用一个字符或另一个小数字容器。

伪码

#define TRUE  1
#define FALSE 0

char bValue = TRUE;

这就是:

#define TRUE 1
#define FALSE 0
typedef enum {
    false = 0,
    true
} t_bool;

如果您使用的是C99编译器,它内置了对布尔类型的支持:

#include <stdbool.h>
int main()
{
  bool b = false;
  b = true;
}

http://en.wikipedia.org/wiki/Boolean_data_type

如果使用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;