[英]Return value of a boolean expression in C
由於不值得一提的原因,我想知道布爾表達式是否有標准定義的值。 例如
int foo () {
return (bar > 5);
}
上下文是我擔心我們的團隊將TRUE定義為不同於1的東西,並且我擔心有人可能會這樣做:
if (foo() == TRUE) { /* do stuff */ }
我知道最好的選擇就是簡單地做
if (foo())
但你永遠不知道。
是否為布爾表達式定義了標准值,還是由編譯器決定? 如果存在,則C99中是否包含標准值? C89呢?
運算符,例如==
, !=
, &&
和||
結果為布爾值的表達式的結果為1,則表達式為true;如果表達式為false,則返回0。 這種表達的類型是int
。
因此,如果TRUE
宏未定義為1
,則上述比較將失敗。
在布爾上下文中評估表達式時,0評估為false,非零評估為true。 為了安全起見,將TRUE
定義為:
#define TRUE (!0)
如評論中所述,如果編譯器符合C99,則可以#include <stdbool.h>
並使用true
和false
。
根據C99 :
6.5.3.3(一元算術運算符)
邏輯否定運算符的結果
!
如果其操作數的值比較不等於0,則為0;如果其操作數的值比較等於0,則為1。結果的類型為int
。 表達式!E
等效於(0==E)
。
6.5.8(關系運算符)
如果指定的關系為true,則每個運算符
<
(小於),>
(大於),<=
(小於或等於)和>=
(大於或等於)應產生1,如果為0,則產生0。假。 結果的類型為int
。
6.5.9(平等經營者)
==
(等於)和!=
(不等於)運算符與關系運算符類似,只是它們的優先級較低。 如果指定的關系為true,則每個運算符的結果為1,如果為false,則為0。 結果的類型為int
。
6.5.13(邏輯AND運算子)
如果
&&
運算符的兩個操作數都不等於0,則產生1。 否則,結果為0。結果的類型為int
。
6.5.14(邏輯或運算符)
||
如果運算符的兩個操作數都不等於0,則運算符應產生1;否則,運算符應產生1。 否則,結果為0。結果的類型為int
。
C
編程語言未定義布爾值。 傳統上, C
編程語言使用integer
類型來表示布爾數據類型。
C中的布爾值:
0 = false`
Any other value = true`
通常人們會使用1
表示正確。
C99引入了_Bool
數據類型,該數據類型在其他C
派生版本中不可用。請參見此處的 Wikipedia鏈接。 此外,由於兼容性原因,添加了新的頭文件stdbool.h
。 該標頭允許程序員以與C++
語言相同的方式使用boolean
類型。
要在C
使用bool
,我們可以如下使用enum
。
enum bool {
false, true
};
bool value;
value = bool(0); // False
value = bool(1); // True
if(value == false)
printf("Value is false");
else
printf("Value is true");
另外,相關的堆棧溢出問題bool是本機C類型嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.