繁体   English   中英

(x <= y <=z) ISO C 中的条件语法?

[英](x <= y <=z) condition syntax in ISO C?

我已经看到条件语法如下,在示例代码中显示了很多来检查整数值y是否在两个边界xz

if (x <= y <= z) { //... }

我以为我在自己之前使用过这个,但是在我运行测试的一小段代码中,条件总是评估为真......现在怀疑我自己的记忆,因为我几乎确定我以前使用过它! ISO C 中是否允许使用该语法? 我只是期望它做一些它不应该做的事情吗?

老式的:

if (x >= y && x <= z) { //... } 

仍然很有魅力,所以我还没有完全进入回忆阶段;)

我猜所有xyz都是一些整数类型,如intlong 对于浮点数注意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 编译器的文档。 研究现有开源软件的源代码(例如在githubgitlab 上)以获得灵感。 您不太可能看到诸如if (x <= y <= z) 这种语法是允许的,但很奇怪。

顺便说一句,在不太可能的情况下 - 我从来没有遇到过,但我从 1980 年代开始用 C 编写代码 - 你的意思是if ((x<=y) <= z)我觉得代码很奇怪,需要明确的评论,或代码if (((x<=y)?1:0) <= z)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM