为什么在Doom 3源中有断言(sizeof(bool)== 1)?

时间:2014-01-05 04:37:33

标签: c++ assert sizeof

Here's the assert。在什么样的合理情况下它会失败,为什么游戏会检查呢?

2 个答案:

答案 0 :(得分:5)

某些平台将bool定义为与int相同的大小。至少旧版本的Mac OS X(以及可能的其他RISC BSD端口)是这样的。据推测,代码使用bool数组并假设效率。 Doom已被移植到许多平台上,所以它可能对这些事情非常谨慎。

必须在运行时完成,因为没有指定sizeof(bool)的标准宏,并且在C ++ 11之前编译时检查不适用于非宏表达式。

答案 1 :(得分:0)

我想我已经找到了你想要的答案。 Doom 3是跨平台的,在x86平台上bool由gcc定义,大小为1.在gcc(Apple当时使用的编译器)中,另一方面,在Mac OS X PowerPC上它默认为4.使用-mone -byte-bool将其更改为1。

来自http://linux.die.net/man/1/g++

  -mone-byte-bool
       Override the defaults for "bool" so that "sizeof(bool)==1".  By
       default "sizeof(bool)" is 4 when compiling for Darwin/PowerPC and 1
       when compiling for Darwin/x86, so this option has no effect on x86.

       Warning: The -mone-byte-bool switch causes GCC to generate code
       that is not binary compatible with code generated without that
       switch.  Using this switch may require recompiling all other
       modules in a program, including system libraries.  Use this switch
       to conform to a non-default data model.