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>
并使用 true
和 false
。
根据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引入了其他C
derivates.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?
出于不值得一提的原因,我想知道是否有布尔表达式的标准定义值。例如
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>
并使用 true
和 false
。
根据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 typeint
. 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 typeint
.
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 typeint
.
6.5.13(逻辑与运算符)
The
&&
operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it yields 0. The result has typeint
.
6.5.14(逻辑或运算符)
The
||
operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it yields 0. The result has typeint
.
C
编程语言没有定义 布尔值 值。传统上,C
编程语言使用 integer
类型来表示布尔数据类型。
C 中的布尔值:
0 = false`
Any other value = true`
通常人们会使用 1
表示真实。
C99引入了其他C
derivates.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?