【发布时间】:2011-04-01 17:33:19
【问题描述】:
C 条件语句总是返回 [1 或 0],还是返回 [0 或“非零”]。我问是因为:
伪代码——
foo(地址,应该发送):
注册 >>= 1
register register |= shouldSend // 表示是否应该发送
如果有人传入一个大于 1 的 shouldSend 值,就会出现问题(因为只有 0 是假的,其他的都是真的,从技术上讲这是有效的)。因为我直接将 shouldSend 的真值与寄存器进行或运算,所以最好不要说 0xFF!我已经有了一个解决方案,所以这个问题更多是出于好奇。我想知道是否:
foo(地址,应该发送):
注册 >>= 1
register register |= (shouldSend > 0) // 表示是否应该发送
解决问题了吗?我认为现在传入的 0xFF(或通常大于 1 的东西)的问题被 C 条件掩盖了。但这仅适用于 IF C 条件保证返回 [0 或 1]。
ps - 我也意识到它可能依赖于编译器,但是 ansi 标准对此有何评论?
【问题讨论】:
-
不应该是(应该发送!= 0)吗?使用 !!shouldSend 是一个邪恶的把戏。
标签: c standards conditional