[英](x <= y <=z) condition syntax in ISO C?
我已经看到条件语法如下,在示例代码中显示了很多来检查整数值y
是否在两个边界x
和z
:
if (x <= y <= z) { //... }
我以为我在自己之前使用过这个,但是在我运行测试的一小段代码中,条件总是评估为真......现在怀疑我自己的记忆,因为我几乎确定我以前使用过它! ISO C 中是否允许使用该语法? 我只是期望它做一些它不应该做的事情吗?
老式的:
if (x >= y && x <= z) { //... }
仍然很有魅力,所以我还没有完全进入回忆阶段;)
我猜所有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
)时,好的编译器(例如GCC )会警告您。
ISO C 中是否允许使用该语法?
另请阅读Modern C和此C 参考以及 C 编译器的文档。 研究现有开源软件的源代码(例如在github或gitlab 上)以获得灵感。 您不太可能看到诸如if (x <= y <= z)
。 这种语法是允许的,但很奇怪。
顺便说一句,在不太可能的情况下 - 我从来没有遇到过,但我从 1980 年代开始用 C 编写代码 - 你的意思是if ((x<=y) <= z)
我觉得代码很奇怪,需要明确的评论,或代码if (((x<=y)?1:0) <= z)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.