返回C中布尔表达式的值

由于不值得一提的原因,我想知道布尔表达式是否有标准的定义值。 例如

int foo () { return (bar > 5); } 

上下文是我担心我们的团队将TRUE定义为不同于1的东西,我担心有人会这样做:

 if (foo() == TRUE) { /* do stuff */ } 

我知道最好的选择就是做

 if (foo()) 

但你永远不知道。

布尔表达式是否有定义的标准值,还是由编译器决定? 如果有的话,标准值是否包含在C99中? 怎么样C89?

一个运算符,如==!=&&|| 导致布尔值的结果将表达式中的1表示为true,如果表达式为false则为0。 这种表达的类型是int

因此,如果TRUE宏未定义为1 ,则上述比较将失败。

在布尔上下文中计算表达式时,0的计算结果为false,非零的计算结果为true。 所以为了安全起见, TRUE应定义为:

 #define TRUE (!0) 

正如评论中提到的,如果您的编译器符合C99,则可以#include 并使用truefalse

根据C99 :

6.5.3.3(一元算术运算符)

逻辑否定运算符的结果! 如果其操作数的值比较不等于0则为0;如果其操作数的值比较等于0则为1.结果的类型为int 。 表达式!E等价于(0==E)

6.5.8(关系运算符)

如果指定的关系为真,则每个运算符< (小于), > (大于), <= (小于或等于)和>= (大于或等于)将产生1,如果是,则为0假。 结果是int类型。

6.5.9(平等运营商)

== (等于)和!= (不等于)运算符类似于关系运算符,除了它们的优先级较低。 如果指定的关系为真,则每个运算符产生1,如果为假,则产生0。 结果是int类型。

6.5.13(逻辑AND运算符)

如果两个操作数的比较不等于0, &&运算符将产生1; 否则,它产生0.结果类型为int

6.5.14(逻辑OR运算符)

|| 如果操作数的任何一个比较不等于0,则运算符应该为1; 否则,它产生0.结果类型为int

C编程语言没有定义布尔值。 传统上, C编程语言使用integer类型来表示布尔数据类型。

C中的布尔值:

 0 = false` Any other value = true` 

通常人们会使用1表示真实。

C99引入了其他C派生中不可用的_Bool数据类型。请在此处查看维基百科链接。 此外,出于兼容性原因,添加了新的标头stdbool.h 。 这个头允许程序员以相同的方式使用boolean类型,就像在C++语言中一样。

要在C使用bool ,我们可以使用如下的enum

 enum bool { false, true }; bool value; value = bool(0); // False value = bool(1); // True if(value == false) printf("Value is false"); else printf("Value is true"); 

另外,相关的堆栈溢出问题是bool本地C类型吗?