1
A
回答
8
0
C99和C11定義了一個帶有布爾語義的整數類型_Bool
,但是沒有真正的關鍵字存在。
的_Bool
類型僅能夠存儲的值1和0,不比較等於0轉換爲1的任何值,並進行比較的任何值等於0被轉換爲0
通過包括<stdbool.h>
,_Bool
類型允許寫爲bool
,與其他一些語言一樣,而true
和false
C預處理器宏分別定義爲1和0。
在此之前,這是一個方便的有些人來定義諸如
#define TRUE 1
#define FALSE 0
typedef char BOOL; /* or #define BOOL char */
或有時
typedef enum {False, True} BOOL;
不同於C99常量,然而,無論是至少有一個缺陷:
BOOL bClicked = False;
++bClicked, ++bClicked;
if (bClicked == False)
printf ("False\n");
else if (bClicked == True)
printf ("True\n");
else
printf ("Unknown: %d\n", bClicked);
這將打印「未知:2」,因爲定義的BOOL
類型不是一個真正的布爾類型。
的C99版:
_Bool bClicked = 0;
++bClicked, ++bClicked;
if (bClicked == 0)
printf ("False\n");
else if (bClicked == 1)
printf ("True\n");
else
printf ("Unknown: %d\n", bClicked);
,將打印「真」,因爲_Bool
只能存儲0和1,所以遞增1拿到2,與之相比,不等於0,結果在1
當然,大多數人只是使用的語言,他們的優勢,而不是實際的比較對真/假常數:
if (bClicked)
{
/* True if bClicked does not compare equal to 0 */
}
else
{
/* False */
}
因爲那b的行爲,對布爾類型或真/假常量沒有真正的需求;它們純粹是爲了表示意圖而存在。
我依稀記得有人在咆哮,某些Windows API函數返回BOOL
類型的值,但TRUE
和FALSE
不是唯一可能的返回值,所以儘管回國應該是一個簡單的比較,因爲在這最後的值有點代碼,需要更多的比較來處理所有可能的情況。如果當時有一個實際的布爾類型,那麼最有可能的是這些函數,不管它們是否會返回值爲int
的值。 A BOOL
返回類型表明只有兩個值可以返回,但顯然那些函數不是這種情況,可能是因爲有第三個(錯誤)返回值。
相關問題
- 1. alloca是C++標準的一部分嗎?
- 2. 是syscall(2)標準的一部分嗎?
- 3. wcslen是ISO/IEC 14882:2003 C++標準庫的一部分嗎?
- 4. 不是List :: Util標準Perl分發的一部分嗎?
- 5. SSH是標準unix軟件包的一部分嗎?
- 6. 是標準ruby發行的最小部分嗎?
- 7. Python標準庫真的是標準嗎?
- 8. STL是C++核心的一部分嗎?
- 9. 是C++ 0x的_1部分嗎?
- 10. size_t僅在C++標準或C標準中嗎?
- 11. WPF是ECMA標準庫嗎?
- 12. 是否log10f()不是標準數學庫的一部分?
- 13. 在糟糕的非標準C++庫中,什麼是好的部分?
- 14. Python標準庫的運輸部分
- 15. 是否有哪個編譯器支持C++標準的哪一部分?
- 16. C#的方式使用外部標準
- 17. 是shell的`source` POSIX標準嗎?
- 18. 這是符合標準的結果嗎?
- 19. utf8_general_ci - 它是標準的Unicode嗎?
- 20. 根據標準,這是有效的C++代碼嗎?
- 21. 塊爲什麼不是python標準庫的一部分?
- 22. C++標準禁止void main()原型嗎?
- 23. C++'AND'評估 - 標準有保證嗎?
- 24. C++ 17標準將包含「std :: byte」嗎?
- 25. 是否有工作部門的標準?
- 26. 轉換標準分離的標準
- 27. 是/是boost :: const_string boost的一部分嗎?
- 28. 默認Servlet是(事實上)標準嗎?
- 29. 這是一種favicon鏈接標準嗎?
- 30. CSS子選擇符是W3C標準嗎?
http://en.wikipedia.org/wiki/De_facto_standard – 2014-09-06 02:37:56
@MarkRansom:幾乎沒有。一些(國際海事組織,風格非常糟糕)C代碼使用這樣的宏。但它遠沒有普及。而且默認情況下,他們只能在某些Windows編譯器中使用各種非標準東西,並且可以爲隨機嵌入式系統使用各種低質量編譯器等等.-) – 2014-09-06 02:52:03