[英]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.