簡體   English   中英

C語言中布爾表達式的返回值

[英]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>並使用truefalse

根據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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM