Return C 中布尔表达式的值

Return value of a boolean expression in C

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

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

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

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

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

if (foo())

但你永远不知道。

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

==!=&&|| 等产生布尔值的运算符将计算为表达式的 1 为 true 和 0如果表达式为假。这个表达式的类型是int.

所以如果TRUE宏没有被定义为1,像上面这样的比较将失败。

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

#define TRUE (!0)

如评论中所述,如果您的编译器兼容 C99,则可以 #include <stdbool.h> 并使用 truefalse

根据C99

6.5.3.3(一元算术运算符)

The result of the logical negation operator ! is 0 if the value of its operand compares unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int. The expression !E is equivalent to (0==E).

6.5.8(关系运算符)

Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false. The result has type int.

6.5.9(等号运算符)

The == (equal to) and != (not equal to) operators are analogous to the relational operators except for their lower precedence. Each of the operators yields 1 if the specified relation is true and 0 if it is false. The result has type int.

6.5.13(逻辑与运算符)

The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

6.5.14(逻辑或运算符)

The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

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

C 中的布尔值:

0 = false` 

Any other value = true`

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

C99引入了其他Cderivates.See维基百科中没有的_Bool数据类型linkhere.此外,出于兼容性原因,添加了新的 header stdbool.h。 header 允许程序员以与 C++ 语言相同的方式使用 boolean 类型。

要在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");

还有,相关的Stack overflow问题 Is bool a native C type?