Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,长修远,我们不能没有钱
随笔 - 172, 文章 - 0, 评论 - 257, 引用 - 0
数据加载中……

c语言(a < b < c )的陷阱

很久没有碰c/c++了, 近两年都是java为主, 偶尔用一下c/c++

(a<b<c) 这种写法我以前从来没有用过. 今天突然有网友提起来, 我习惯性的在脑海中把其翻译成
(a<b && b<c) 酿成了一些小错误. 我悔过了.

网友给我扔来了c99的标准
§6.5.9 第86页 89) The expression a<b<c is not interpreted as in ordinary mathematics. As the syntax indicates, it
means (a<b)<c; in other words, ‘‘if a is less than b, compare 1 to c; otherwise, compare 0 to c’’.

意思也就是说. (a<b<c) 按照从左到右的方式开始运算
1.( (a<b) < c )
2.a<b ?  TRUE : FALSE;
3.所以, 最终表达式运算的是 (1<c) 或者 (0<c)

C语言中. 虽然任何不等于0的数为真. 但是实际在宏定义中 TRUE == 1  FALSE == 0;

posted on 2008-10-23 16:35 Khan 阅读(2657) 评论(5)  编辑 收藏 引用 所属分类: GCC/G++跨平台开发

评论

# re: c语言(a < b < c )的陷阱  回复  更多评论   

这种代码我还真在公司的一次代码评审时遇到过,而且还是一名老员工的代码,呵呵。
2008-10-24 07:28 | Tony Bai

# re: c语言(a < b < c )的陷阱  回复  更多评论   

这种代码确实要避开. 不过有时候还是能带来一些便利的

我公司不少老员工是c精,
写的代码中有不少特殊语法, 结构很精简, 但是我很多都读不懂, 所以我几乎无法维护.
2008-10-24 13:56 | Khan's Notebook

# re: c语言(a < b < c )的陷阱  回复  更多评论   

a<b<c 还真的能用?我一直认为是错的。
2008-10-25 16:52 | 金山词霸2008

# re: c语言(a < b < c )的陷阱[未登录]  回复  更多评论   

小弟刚学C的时候也被阴过 ⊙﹏⊙b汗
#include <stdio.h>
main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}

刚开始我总都弄不明白为什么是0,以为是1
2009-07-23 11:39 | C

# re: c语言(a < b < c )的陷阱  回复  更多评论   

有些陷阱的确一不小心就掉下去了,比如 -1 < 0U 为 false
2009-08-22 20:41 | Rye

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理