Here's the assert。在什麼樣的情況下它會失敗,爲什麼遊戲會檢查它?爲什麼在Doom 3源文件中存在assert(sizeof(bool)== 1)?
回答
某些平臺將bool
定義爲與int
相同的尺寸。至少舊版本的Mac OS X(以及其他RISC BSD端口)是這樣的。假設代碼使用bool
陣列,並假設效率。 Doom已經被移植到了很多平臺上,所以對於這樣的事情可能非常謹慎。
它必須在運行時完成,因爲沒有指定sizeof(bool)
的標準宏,編譯時檢查在C++ 11之前不能與非宏表達式一起工作。
謝謝!但爲什麼它依賴於布爾的大小? –
@golergka如果它正在創建非常大的數組,那麼將'int'替換爲'char'會導致內存需求膨脹並且會影響性能。更不用說丟掉可能嚴格違背標準的地址算術的可能性。 – Potatoswatter
「某些平臺將bool定義爲int」 - bool是一種內置類型,從不「定義」爲其他類型,但bool的大小可能與int的大小相同。 –
我想我遇到了你正在尋找的答案。 Doom 3是跨平臺的,在x86平臺上,bool由gcc定義,大小爲1.在gcc(當時Apple使用的編譯器)中,另一方面,在Mac OS X PowerPC上,默認爲4.使用-mone字節,布爾將其更改爲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.
- 1. 爲什麼在Doom源代碼中有#define ID_INLINE內聯定義?
- 2. 爲什麼的sizeof( 「 - 2147483648」) - 1
- 3. 爲什麼(sizeof(int)> -1)爲false?
- 4. 爲什麼我不應該在C文件中使用sizeof(double)
- 5. 在csh中,爲什麼4 - 3 + 1 == 0?
- 6. sizeof空結構在C中爲0,在C++中爲1爲什麼?
- 7. 爲什麼sizeof('a')在C中是4?
- 8. C爲什麼sizeof('a')= 4且sizeof(char)= 1?
- 9. 爲什麼在java中沒有sizeof
- 10. 爲什麼sizeof(a)16? (sizeof int是4)
- 11. 爲什麼(3&0x1111)= 1?
- 12. 爲什麼1 +++ 2 = 3?
- 13. 爲什麼(#(+%1)3)工作但(#(%)3)在Clojure中不起作用?
- 14. 爲什麼在項目中使用'assert'? (爲什麼使用它這麼多次)
- 15. 爲什麼stat()返回-1即使文件存在[RHEL 7.2]
- 16. sizeof(int [1])是什麼意思?
- 17. assert(3/2 == 1):這是否工作?
- 18. 是否定義了sizeof(bool)?
- 19. (seq#{3 1 22 44})爲什麼會在clojure中出現(1 3 44 22)?
- 20. 什麼是「1」在Perl源代碼中?
- 21. 爲什麼存在將函數隱式轉換爲bool?
- 22. 爲什麼sizeof(string)== 32?
- 23. 在C中,爲什麼if(sizeof(int)> - 1)給出錯誤輸出?
- 24. 爲什麼winapi的BOOL使用1爲真,2爲假?
- 25. 爲什麼「memset(arr,-1,sizeof(arr)/ sizeof(int))」不能將整數數組清除爲-1?
- 26. 爲什麼R命令文件爲1 10 100不是1 2 3?
- 27. 爲什麼maven settings.xml文件不存在?
- 28. 爲什麼vcxproj.filters文件存在?
- 29. 爲什麼Python說文件不存在?
- 30. 爲什麼這個的sizeof(C + A)是給3
我猜測,故障依賴於編譯器。這看起來很奇怪。 – Floris
有什麼合理的情況?有些實現中'bool'的大小與int相同。 –
標準並不保證這是真實的。我想他們檢查它,因爲其他代碼可能取決於它。 – leemes