我已经看到如下的条件语法,在示例代码中显示了很多,以检查整数值 y
是否在两个边界 x
和 z 之间
:
if (x <= y <= z) { //... }
我以为我自己之前用过这个,但在我运行测试的一小段代码中,条件总是计算为真... 现在怀疑我自己的内存,因为我几乎可以肯定我以前用过它! ISO C 中是否允许语法?我只是希望它做一些它不应该做的事情吗?
老式的:
if (x >= y && x <= z) { //... }
仍然很有魅力,所以我还没有完全进入记忆的老生常谈阶段;)
最佳答案
我猜所有 x
, y
, z
是一些整数类型,如 int
或 long
.对于 floating point注意 NaN != NaN
.....
第一个if (x <= y <= z)
是错的。它被解析为 if ((x<=y) <= z)
.比较返回一个 bool 值,当在某些积分上下文中使用时,该值被提升为 0(对于 false)或 1(对于 true)。所以当x <= y
测试表现为 if (1 <= z)
相反x > y
该测试相当于 if (0 <= z)
当要求给出所有警告(例如 gcc -Wall
)时,一个好的编译器(例如 GCC )会警告您。
Is the syntax allowable in ISO C?
另请阅读 Modern C还有这个C reference以及您的 C 编译器的文档。研究现有的源代码以获取灵感open source软件(例如 github 或 gitlab )。您不太可能看到类似 if (x <= y <= z)
的代码.这种语法是允许的,但很奇怪。
顺便说一句,在不太可能的情况下 - 我从未遇到过这种情况,但我从 1980 年代开始就用 C 编写代码 - 你的意思是 if ((x<=y) <= z)
我觉得代码很奇怪,需要明确的注释,或者代码 if (((x<=y)?1:0) <= z)
关于c - (x <= y <=z) ISO C 中的条件语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037192/