如何在 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 中,true
和 false
都是分别被 1
和 0
替换的宏,并且bool
是一个扩展为布尔类型 _Bool
的宏。
@its:如果为bool
、true
和false
定义宏,则将返回类型设为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<<(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
作为内在纯布尔类型。不需要#include
s:
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 中使用布尔数据类型?的主要内容,如果未能解决你的问题,请参考以下文章
为什么是C ++中的“整数”数据类型,能够容纳“ true”或“ false;布尔值