打印

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

[复制链接]
楼主: anazel
手机看帖
扫描二维码
随时随地手机跟帖
21
q331513266| | 2011-12-15 11:44 | 只看该作者 回帖奖励 |倒序浏览
是高手 写成垃圾也没人说不好,顶多说是有个性;P是菜鸟 写的再好还是被批……;P

使用特权

评论回复
22
linfuchi| | 2011-12-15 11:57 | 只看该作者
;P

使用特权

评论回复
23
储小勇_526| | 2011-12-15 12:28 | 只看该作者
:o有些人干嘛骂人呢,能执行就是好的

使用特权

评论回复
24
ups888| | 2011-12-15 12:37 | 只看该作者
就是对Reverse_Display这个位赋值,( Adjust_Index == 6)的结果布尔型非0即1;

使用特权

评论回复
25
落雪_Y| | 2011-12-15 13:55 | 只看该作者
大家各抒己见是好事,只是在表达意思的时候 不要贬低他人的想法

使用特权

评论回复
26
yuandm1| | 2011-12-15 14:44 | 只看该作者
酱紫,学习

使用特权

评论回复
27
frlop| | 2011-12-15 14:51 | 只看该作者
恩,学习了,乍一看还真没看懂。

使用特权

评论回复
28
haochengdi| | 2011-12-15 15:00 | 只看该作者
学习了

使用特权

评论回复
29
yanghao9123| | 2011-12-15 15:12 | 只看该作者
LPC1788  armkit.taobao.com

使用特权

评论回复
30
mk83218| | 2011-12-15 15:19 | 只看该作者
看不明白,真是强大的语句。

使用特权

评论回复
31
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语言的创始人)写出这样的代码,我一样送句:不装能死啊?

使用特权

评论回复
32
赤铸| | 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
33
ayb_ice| | 2011-12-16 08:02 | 只看该作者
32楼:
"问号表达式那种,既不优美,也不实用"

不敢苟同

使用特权

评论回复
34
Thunder_f| | 2011-12-16 13:37 | 只看该作者
对于位的操作,用问号的方式是感觉有点浪费打字的时间。
我比较喜欢楼主的写法加上括号。

使用特权

评论回复
35
honghua_66| | 2011-12-18 18:05 | 只看该作者
我认为这样写是最明了的!
Reverse_Display = (Adjust_Index == 6);
解释:
若满足Adjust_Index == 6,则Reverse_Display =1,否则Reverse_Display =0

使用特权

评论回复
36
zhaofy521| | 2011-12-18 19:17 | 只看该作者
Reverse_Display  =  ( Adjust_Index  ==  6);
这样可读性好些

使用特权

评论回复
37
kfzy6| | 2011-12-20 16:35 | 只看该作者
直接在“Reverse_Display =1”或“Reverse_Display =0”上加断点,就可以监视程序运行状态,这有时是必须的调试技术

使用特权

评论回复
38
maomao603| | 2011-12-27 16:02 | 只看该作者
3.if(6 == Adjust_Index)  这一句也不符合C标准
???
我觉得这样写好些
如果你不小心写成了
if(6 = Adjust_Index)
编译器一定会报错
但是
一不小心写成了
if(Adjust_Index=6)
那就不一定了

使用特权

评论回复
39
NowCan| | 2011-12-28 11:13 | 只看该作者
这样写让人看的费劲,好歹加个括号啊。

使用特权

评论回复
40
好!不走调| | 2011-12-28 14:00 | 只看该作者
LZ的写法搞懂了优先级就没啥问题了,搞不懂嘛还是用3,4楼的写法好了。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则