一句C程序看不明白,请指教

[复制链接]
8372|43
q331513266 发表于 2011-12-15 11:44 | 显示全部楼层
是高手 写成垃圾也没人说不好,顶多说是有个性;P是菜鸟 写的再好还是被批……;P
linfuchi 发表于 2011-12-15 11:57 | 显示全部楼层
储小勇_526 发表于 2011-12-15 12:28 | 显示全部楼层
:o有些人干嘛骂人呢,能执行就是好的
ups888 发表于 2011-12-15 12:37 | 显示全部楼层
就是对Reverse_Display这个位赋值,( Adjust_Index == 6)的结果布尔型非0即1;
落雪_Y 发表于 2011-12-15 13:55 | 显示全部楼层
大家各抒己见是好事,只是在表达意思的时候 不要贬低他人的想法
yuandm1 发表于 2011-12-15 14:44 | 显示全部楼层
酱紫,学习
frlop 发表于 2011-12-15 14:51 | 显示全部楼层
恩,学习了,乍一看还真没看懂。
haochengdi 发表于 2011-12-15 15:00 | 显示全部楼层
学习了
yanghao9123 发表于 2011-12-15 15:12 | 显示全部楼层
LPC1788  armkit.taobao.com
mk83218 发表于 2011-12-15 15:19 | 显示全部楼层
看不明白,真是强大的语句。
sleepybear 发表于 2011-12-15 15:46 | 显示全部楼层
bit Reverse_Display;
unsigned char Adjust_Index;
Reverse_Display = Adjust_Index == 6; 这句是什么意思呢?谢谢!
anazel 发表于 2011-12-14 16:14

也不知道这代码原作者是谁。加个括号能死啊?就是MDR(C语言的创始人)写出这样的代码,我一样送句:不装能死啊?
赤铸 发表于 2011-12-15 17:26 | 显示全部楼层
就像你写 a = 1+2 一样,“1+2”也是个表达式
“==”跟“+”一样都是运算符,“a == b”也是个表达式,它的类型是“布尔型或逻辑型(C语言中只有整形,但概念上可以看作布尔型)”,当 Adjust_Index 值为6,该表达式值就是1,当不是6,该表达式的值就是1
“变量 = 表达式”再正常不过了,当然 ?: 不能算错
唯一问题就是大家都有个思维定式,习惯于认为 a==b 这样的东西只能放在 if() 的怀抱里
MISRA 强调的是安全性,很重要的一条就是表达式的副作用,如果 Adjust_Index 是个有副作用的表达式,比如,是个函数 f(),返回一个整数,但内部干了很多其它事,比方说修改全局变量、向硬件发送指令……,那把它嵌在一个复杂表达式内部就有潜在的危险了,这时,稳妥的做法是先把它的返回值赋给某个变量,再用这个变量
a = f();
b = ...
……
if( a && b )
...
这时,这个 a && b 的表达式是非常安全的,当然 MISRA 的做法更极端,它要求写成
if(a)
  if(b)
...
所有这些跟 Adjust_Index == 6 这样的写法都没有冲突,只要 Adjust_Index 是个单纯的变量

当然,每个公司都有自己风格,工作中,团队精神第一
我见过的多数风格都是靠断言辅助调试、保证正确性

有时候,最“笨”的反而是最好的,所以用 if else 的那种写法也不错,不优美,但实用
问号表达式那种,既不优美,也不实用

评分

参与人数 1威望 +1 收起 理由
john_lee + 1

查看全部评分

ayb_ice 发表于 2011-12-16 08:02 | 显示全部楼层
32楼:
"问号表达式那种,既不优美,也不实用"

不敢苟同
Thunder_f 发表于 2011-12-16 13:37 | 显示全部楼层
对于位的操作,用问号的方式是感觉有点浪费打字的时间。
我比较喜欢楼主的写法加上括号。
honghua_66 发表于 2011-12-18 18:05 | 显示全部楼层
我认为这样写是最明了的!
Reverse_Display = (Adjust_Index == 6);
解释:
若满足Adjust_Index == 6,则Reverse_Display =1,否则Reverse_Display =0
zhaofy521 发表于 2011-12-18 19:17 | 显示全部楼层
Reverse_Display  =  ( Adjust_Index  ==  6);
这样可读性好些
kfzy6 发表于 2011-12-20 16:35 | 显示全部楼层
直接在“Reverse_Display =1”或“Reverse_Display =0”上加断点,就可以监视程序运行状态,这有时是必须的调试技术
maomao603 发表于 2011-12-27 16:02 | 显示全部楼层
3.if(6 == Adjust_Index)  这一句也不符合C标准
???
我觉得这样写好些
如果你不小心写成了
if(6 = Adjust_Index)
编译器一定会报错
但是
一不小心写成了
if(Adjust_Index=6)
那就不一定了
NowCan 发表于 2011-12-28 11:13 | 显示全部楼层
这样写让人看的费劲,好歹加个括号啊。
好!不走调 发表于 2011-12-28 14:00 | 显示全部楼层
LZ的写法搞懂了优先级就没啥问题了,搞不懂嘛还是用3,4楼的写法好了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部