c - NOT false 和 true 的区别

标签 c

我有这段代码:

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/

相关文章:

c - C中的某些字节异或

C 腐败或双重释放,为什么?

c++ - 从 engOpen(..) 启动 matlab,被通知引擎被关闭

python - avr 和 python 串行通信时出现奇怪的 b'\x' 数据

c - 确保释放锁的宏

c - socket C 客户端特定编号

c - “枚举设备”: is not a member of 'IDirectInput8A'

c - 使用 fscanf 在读完一个句子后不读入 logn 空行

.net - 在对象列表中搜索所有属性

C - 添加二维字符数组的元素