在C99中bool type return可以做什么?
What can bool type return in C99?
布尔保证 return 是什么?我可以依赖 bool 类型始终被解释为 0 或 1 吗?如果 bool 的数值解释在 C99 中不可靠,是否有标准?当依赖 bool 进行算术运算时,在 LLVM、GCC 或 Visual C++ 中有什么我应该注意的吗?
举个例子,如果我这样做会怎样:
// An example of calculating a possible stride in bytes.
// hasData(), is8bit(), and is16bit() return as bool type
unsigned int stride = object->hasData() * object->size() *
(object->is8bit() * sizeof(uint8_t) +
object->is16bit() * sizeof(uint16_t));
在示例中,我只押注 bool 类型 returning 0 或 1。
What is bool guaranteed to return as? Can I rely on a bool type to always be interpreted as 0 or 1?
在一个严格符合的程序中,_Bool
(或 stdbool.h
中的 bool
)表达式保证被计算为 0
或 1
。
如果您从 bool
表达式中得到不同的值,这意味着您正在上游调用一些未定义的行为。
表达式的布尔值总是 1
(true
) 或 0
(false
) 并且类型为 int
而不是 _Bool
。
C99-7.16:
- The header
<stdbool.h>
defines four macros.
- The macro
bool
expands to _Bool
.
- The remaining three macros are suitable for use in
#if
preprocessing directives. They are
true
: which expands to the integer constant 1
,
false
: which expands to the integer constant 0
, and
- __bool_true_false_are_defined which expands to the integer constant 1.
在 C++ 中,bool
是一种保证包含 true
或 false
的类型。当转换为 int
(如您的示例)时,它们分别对应于 1 和 0。
C99 标准要求编译器生成 _Bool
0 或 1 的值。C++ 也有此要求。不,我不知道描述这个的标准文档的确切页面。
当然,在引入 16 年后,编译器中仍有可能存在错误,如果我们的编译器已经使用了 10 年,并且没有经过良好的 C99 兼容性测试它被生产出来了。但是我经常编写依赖编译器从条件表达式生成 0 或 1 的代码,例如。
布尔保证 return 是什么?我可以依赖 bool 类型始终被解释为 0 或 1 吗?如果 bool 的数值解释在 C99 中不可靠,是否有标准?当依赖 bool 进行算术运算时,在 LLVM、GCC 或 Visual C++ 中有什么我应该注意的吗?
举个例子,如果我这样做会怎样:
// An example of calculating a possible stride in bytes.
// hasData(), is8bit(), and is16bit() return as bool type
unsigned int stride = object->hasData() * object->size() *
(object->is8bit() * sizeof(uint8_t) +
object->is16bit() * sizeof(uint16_t));
在示例中,我只押注 bool 类型 returning 0 或 1。
What is bool guaranteed to return as? Can I rely on a bool type to always be interpreted as 0 or 1?
在一个严格符合的程序中,_Bool
(或 stdbool.h
中的 bool
)表达式保证被计算为 0
或 1
。
如果您从 bool
表达式中得到不同的值,这意味着您正在上游调用一些未定义的行为。
表达式的布尔值总是 1
(true
) 或 0
(false
) 并且类型为 int
而不是 _Bool
。
C99-7.16:
- The header
<stdbool.h>
defines four macros.- The macro
bool
expands to_Bool
.- The remaining three macros are suitable for use in
#if
preprocessing directives. They are
true
: which expands to the integer constant1
,false
: which expands to the integer constant0
, and- __bool_true_false_are_defined which expands to the integer constant 1.
在 C++ 中,bool
是一种保证包含 true
或 false
的类型。当转换为 int
(如您的示例)时,它们分别对应于 1 和 0。
C99 标准要求编译器生成 _Bool
0 或 1 的值。C++ 也有此要求。不,我不知道描述这个的标准文档的确切页面。
当然,在引入 16 年后,编译器中仍有可能存在错误,如果我们的编译器已经使用了 10 年,并且没有经过良好的 C99 兼容性测试它被生产出来了。但是我经常编写依赖编译器从条件表达式生成 0 或 1 的代码,例如。