Tob*_*oby 1 c conditional-statements
我已经看到条件语法如下所示,在示例代码中显示了很多,以检查整数值y是否在两个边界之间,x并且z:
if (x <= y <= z) { //... }
Run Code Online (Sandbox Code Playgroud)
我以为我在自己之前使用过这个,但是在一小段代码中我正在进行测试,条件总是评估为真......现在怀疑我自己的记忆因为我已经确定我以前用过它了!ISO C中允许的语法是什么?我只是期望它能做一些不应该做的事情吗?
老式的:
if (x >= y && x <= z) { //... }
Run Code Online (Sandbox Code Playgroud)
仍然有魅力,所以我还没有完全回到召回的蹒跚阶段;)
我想这一切x,y,z 一些整型像int或long.对于浮点通知NaN != NaN.....
第一个if (x <= y <= z)是错的.它被解析为if ((x<=y) <= z).比较返回一个布尔值,当在某个整数上下文中使用时,该值被提升为0(表示假)或1(表示真).因此,当x <= y测试表现为if (1 <= z)和相反时x > y,测试相当于if (0 <= z)
当被要求提供所有警告(例如gcc -Wall)时,一个好的编译器会警告你.
顺便说一句,在不太可能的情况下 - 我从来没有遇到过这种情况,但我从20世纪80年代开始使用C代码 - 你的意思是if ((x<=y) <= z)我觉得代码很奇怪,需要一个明确的评论或代码if (((x<=y)?1:0) <= z)
| 归档时间: |
|
| 查看次数: |
2168 次 |
| 最近记录: |