【发布时间】:2016-03-26 21:11:39
【问题描述】:
什么是 bool 保证返回的?我可以依靠 bool 类型始终被解释为 0 或 1 吗?如果布尔的数值解释在 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 类型只返回 0 或 1。
【问题讨论】:
-
任何实际的实现都会使_Bool 更大。 (实际上它将有空间存储 0..255)。 C 保证
unsigned int有空间容纳 65535。该帖子被问到一个相当于问“我保证 unsigned int 永远不会计算为大于 65535?”的问题。对于 unsigned int,答案是“否”。对于 _Bool,它是“是”。 -
您的标题显示为“C99”,但您的标签包含“C++”。是哪个?
-
如果您遇到问题,请检查您的标头不要在某处使用
#define bool或typedef bool...从 C89 迁移的代码可能会这样做,而不是包含 C99 的#include <stdbool.h> -
@M.M 本来想问C++11这个问题,但是忘记改标签了。
标签: c standards arithmetic-expressions integer-arithmetic