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

标签 c conditional-statements

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

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

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

老式的:

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

仍然很有魅力,所以我还没有完全进入记忆的老生常谈阶段;)

最佳答案

我猜所有 x , y , z是一些整数类型,如 intlong .对于 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软件(例如 githubgitlab )。您不太可能看到类似 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/

相关文章:

bash - 订购功能和条件的正确方法

C++11 std::conditional 在运行时?

c - float 和 long 之间的异常转换

c - 即使客户端不发送数据也会发生 UNIX 套接字读取

html - IF IE 条件语句不起作用

python - 需要 boolean 切片的帮助

Javascript - 有人可以向我解释一下它的作用吗?

c - 嵌入式应用测试代码

c - 如何使用宏中定义的字符串/将其转换为整数?

c - 查找新替换的数组的大小,其 N 现在已减少