我有这段代码:
if ( ( data.is_err != FALSE ) && ( available != FALSE ) )
{
Set_Dtc_TimerChange(DTC_VPOS, +dt_ms);
}
为什么要使用不等于假而不是等于真?有区别吗?
最佳答案
这是一个 C 问题而不是 EE,但是因为 C 非常接近硬件......
false 的旧 C 定义是 0,所有其他值都是 true,即
if( 0 ){ ... }
不会执行...代码,但是例如
if( 1 ){ ... }
if( -1 ){ ... }
if( 42 ){ ... }
一切都会。因此,您可以测试一个真值是否等于 FALSE(定义为 0),但是当您想要将它与 true 进行比较时,您会使用哪个值作为 true?有人说 TRUE 必须定义为 (!FALSE),但那样会产生 -1,这是 一个真值,但不是唯一的。
因此程序员倾向于避免与 TRUE 比较。
现代 C 应该通过将 TRUE 定义为(我认为)1 来解决这个问题,但这仍然会产生有趣的结果,例如
int probably( void ){ return 42; }
if( probably() ){ ... }
if( probably() == TRUE ){ ... }
这归咎于 probbaly(),它返回了一个模糊的真值。
就我个人而言,我会写
if ( data.is_err && available ) { ... }
我认为它更具可读性并且避免了比较。
(顺便说一句,当出现数据错误时,怎么可能有一些东西可用?)
关于c - NOT false 和 true 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32533894/