Here's the assert。在什么样的合理情况下它会失败,为什么游戏会检查呢?
答案 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.