簡體   English   中英

NOT false和true之間的區別

[英]Difference between NOT false and true

我有這段代碼:

if ( ( data.is_err != FALSE ) && ( available != FALSE ) )
    {
        Set_Dtc_TimerChange(DTC_VPOS, +dt_ms);
    }

為什么你會使用不等於假而不是等於真? 有什么不同嗎?

這是一個C問題,而不是EE,但由於C非常接近硬件....

舊的C定義false為0, 其他所有值都為true ,即

if( 0 ){ ... }

不會執行...代碼,但是例如

if( 1 ){ ... }
if( -1 ){ ... }
if( 42 ){ ... }

一切都會。 因此,您可以測試真值等於FALSE(定義為0),但是當您想要將其與true進行比較時,您將使用哪個值為true? 有人說TRUE必須定義為(!FALSE),但這會產生-1,這是一個值true,但不是唯一值。

因此,程序員傾向於避免使用TRUE。

現代C應該通過將TRUE定義為(我認為)1來解決這個問題,但是stil會產生有趣的后果,比如說

int probably( void ){ return 42; }
if( probably() ){ ... }
if( probably() == TRUE ){ ... }

這里的責任在於probbaly(),它返回一個明確的真值。

就個人而言,我會寫的

if ( data.is_err && available ) { ... }

我認為它更具可讀性,避免了比較。

(順便說一句,當出現數據錯誤時,有什么東西可用?)

此代碼可以安全地替換為:

if (  data.is_err &&  available ) { 
    Set_Dtc_TimerChange(DTC_VPOS, +dt_ms); 
}

除非FALSE在程序的某處有一些非傳統的定義。 一個好的編譯器將為任一形式生成等效代碼,但更可讀的更好。

C沒有布爾類型。 相反,它將0視為false,將任何其他值視為true。 因此,沒有值可以測試以確定值是否為true。 如果您編寫慣用的C代碼,這並不重要: if (x) ...將始終做正確的事情。 對這個成語感到不舒服的人喜歡明確地對某些虛假的表示進行測試,但從不解釋為什么他們將這限制在一個級別。 畢竟, x != FALSE只是一個值,並且需要測試相同的參數: if ((x != FALSE) != FALSE)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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