繁体   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