如何在 C 中使用布尔数据类型?

Posted

技术标签:

【中文标题】如何在 C 中使用布尔数据类型?【英文标题】:How to use boolean datatype in C? 【发布时间】:2011-05-08 18:22:24 【问题描述】:

我只是用 C 编写代码,结果发现它没有布尔/布尔数据类型。是否有任何 C 库可以包含以使我能够返回 boolean/bool 数据类型?

【问题讨论】:

通常使用一个普通的旧 'int',假设 0 是 'false' 而其他都是 'true'。 Is bool a native C type?的可能重复 【参考方案1】:

如果你有一个支持 C99 的编译器,你可以

#include <stdbool.h>

否则,您可以根据需要定义自己的。根据您的使用方式(以及您是否希望能够将代码编译为 C++),您的实现可能很简单:

#define bool int
#define true 1
#define false 0

不过,在我看来,您不妨只使用int 并使用零表示错误,使用非零表示正确。这就是它通常在 C 中完成的方式。

【讨论】:

@James,它奏效了。但是我应该返回什么?我的意思是 0 还是假? @ysap:我选择宏是因为它更接近 C99 所做的(在 C99 中,truefalse 都是分别被 10 替换的宏,并且bool 是一个扩展为布尔类型 _Bool 的宏。 @its:如果为booltruefalse 定义宏,则将返回类型设为bool 并返回false。否则,只需将您的返回类型设为int 并返回0。这取决于你想做什么。我只是认为非宏观方法更好。 @James - 抱歉,我搞砸了这条评论,在编辑时将其删除,所以我将其重新发布为答案。你回复得太快了…… 我实际上更喜欢在 C 中使用 0 作为 false 和非零作为 true 而没有特定类型。在调用可能失败的其他情况下,0 表示成功,NZ 是错误代码(通常为负代码)。【参考方案2】:

实际上,C99 有一个布尔数据类型,但如果您必须使用旧版本,只需定义一个类型:

typedef enum false=0, true=1 bool;

【讨论】:

如果你问我,“模仿”bool C99 之前的版本是危险的,因为语义不同。 (bool)2 产生 2,而不是 1。更现实的例子:1U&lt;&lt;(bool)isdigit(c) 在大多数实现中都会给出错误的结果。【参考方案3】:

C99 有一个bool 类型。要使用它,

#include <stdbool.h>

【讨论】:

James McNellis 的 answer 已经说过要这样做。【参考方案4】:

作为 James McNellis 答案的替代方案,我总是尝试对 bool 类型使用枚举而不是宏:typedef enum bool false=0; true=1; bool;。 b/c 更安全,它允许编译器进行类型检查并消除宏扩展竞争

【讨论】:

这并不妨碍你说bool b = 1; 据我所知,对于使用 #define bool int 获得的内容,没有额外的类型检查。 哦,我想我明白你的意思了。不过,你说的是变量声明,我说的是真假标记的实际使用。 你能举个例子说明在哪里进行了额外的类型检查吗? 嗯,确实很难,但这只是一个例子:float f; f = true; 应该对隐式(并且可能不兼容)类型转换发出警告。【参考方案5】:

C99 引入了 _Bool 作为内在纯布尔类型。不需要#includes:

int main(void)

  _Bool b = 1;
  b = 0;

在真正符合 C99(或更高版本)的 C 编译器上,上述代码应该可以完美编译。

【讨论】:

【参考方案6】:

我们可以为此使用枚举类型。我们不需要库。 例如

           enum false,true;

false 的值为 0,true 的值为 1。

【讨论】:

【参考方案7】:
struct Bool 
    int true;
    int false;


int main() 

    /* bool is a variable of data type – bool*/
    struct Bool bool;

    /*below I’m accessing struct members through variable –bool*/ 
    bool = 1,0;
    print("Student Name is: %s", bool.true);
    return 0;

【讨论】:

以上是关于如何在 C 中使用布尔数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

C99 布尔数据类型?

为什么是C ++中的“整数”数据类型,能够容纳“ true”或“ false;布尔值

c语言中的布尔类型、枚举类型是个啥概念?

如何在目标 C 类中设置布尔类型属性

dbus Variant:如何在 Python 中保留布尔数据类型?

如何使用布尔和字符串数据类型之间的比较运算符从数据框中过滤数据