返回C中布尔表达式的值

时间:2016-09-27 17:08:37

标签: c boolean c99 c89

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

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

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

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

我知道最好的选择是简单地做

if (foo())

但你永远不知道。

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

2 个答案:

答案 0 :(得分:3)

导致布尔值的==!=&&||等运算符将计算为表达式中的1为真,如果为0,则为0表达是错误的。表达的类型是int

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

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

#define TRUE (!0)

正如评论中所提到的,如果您的编译器符合C99标准,您可以#include <stdbool.h>并使用truefalse

根据C99

6.5.3.3(一元算术运算符)

  

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

6.5.8(关系运算符)

  

每个运营商<(小于),>(大于),<=   (小于或等于),>=(大于或等于)   如果指定的关系为真,则应为1,如果为假,则为0。   结果的类型为int

6.5.9(平等运营商)

  

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

6.5.13(逻辑AND运算符)

  

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

6.5.14(逻辑OR运算符)

  

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

答案 1 :(得分:0)

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

C中的布尔值:

0 = false` 

Any other value = true`

通常人们会将1用于真实。

C99 引入了其他_Bool个衍生产品中未提供的C数据类型。请参阅维基百科链接here。此外,出于兼容性原因,添加了新标头stdbool.h。此标头允许程序员以boolean语言的相同方式使用C++类型。

要在bool中使用C,我们可以使用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");

另外,相关的堆栈溢出问题 Is bool a native C type?