打印
[嵌入式linux]

潭浩强的C和linux的C,请老手指教

[复制链接]
楼主: netfight
手机看帖
扫描二维码
随时随地手机跟帖
21
yuands| | 2009-4-7 03:03 | 只看该作者 回帖奖励 |倒序浏览

太复杂了,工作以后不要写这种容易引起争议的语句了

这样的写法只能是考试题了

你要是经常这样写程序,估计过几天你自己都看不懂了

想实现哪种功能就多写几行了,虽然代码多了一些,但是更容易理解一些

使用特权

评论回复
22
hunetson| | 2009-4-10 14:42 | 只看该作者

13楼和20楼正解!

少用i++吧

使用特权

评论回复
23
huntington| | 2009-4-10 22:39 | 只看该作者

俺是一个怀旧的人

俺装了dos,还在dos下装了tc2.0,玩起来还不错

使用特权

评论回复
24
电子尘埃| | 2009-4-11 09:30 | 只看该作者

顶楼上,认为楼上说的最在理,

以后大家都 把像
#define SQ(y) ((y)*(y))这样的宏定义全改成内联函数算了

使用特权

评论回复
25
msleep| | 2009-4-11 11:44 | 只看该作者

曾经白醋

使用特权

评论回复
26
渤海三叠浪| | 2009-4-13 19:54 | 只看该作者

这帖子好不好呢?

i++ 在函数中不要出现!

#define SQ(y) ((y)*(y))弊大于利

之所以要这样 ,是因为每个人都可能会犯错误!!!!
看看那美国飞船是怎么消失的?
宝马汽车是怎么返厂的?

我的观点是效率第二,可靠第一! (不要用中庸的观点反驳我哦)

使用特权

评论回复
27
icecut| | 2009-4-14 21:19 | 只看该作者

都对.

使用特权

评论回复
28
飞言走笔| | 2009-4-19 09:18 | 只看该作者

多一行语句,少一些麻烦……

- -!

使用特权

评论回复
29
flanker| | 2009-4-19 18:34 | 只看该作者

这样写违反编程规范

项目经理抓到要脱了裤子打PP

使用特权

评论回复
30
hojze| | 2009-6-3 12:05 | 只看该作者

潭浩强的C和linux的C,请老手指教

教材印错了吧,你自己用TURBO C编译一下就知道了

使用特权

评论回复
31
bh_wang| | 2009-9-11 09:52 | 只看该作者
书上有讲:

不要在宏定义里面使用++ or --

使用特权

评论回复
32
bsdl900| | 2009-9-21 23:13 | 只看该作者
在标准c中对printf("%d ",SQ(i++)) 展开 就是 printf("%d ",(i++)*(i++)),用的时候应十分小心。

使用特权

评论回复
33
逍遥派掌门| | 2009-10-11 23:36 | 只看该作者
TC的结果是正确的。

理由一:
C的规则:
         1、 同优先级,从左到右
         2、 i++ ,是先使用,后自增加。

理由二:
#define SQ(y) ((y)*(y))
              ========= --》 这里是((y) * (y)),而不是 (y * y),
                             意思是算式,不是直接代值。
                             可以理解为: ( f1(y) * f2(y) )

============================================================
main(){
    int i=1;
    while(i<=5)
     
      printf("%d\n",SQ(i++));
}

   SQ(i++) 代换成 :(i++)   *  (i++)
                  先f1(y) =1 ,i=2  ;
                  然后再f2(y) ,此时i 已经是 2 了 。。。。 后面省略。。。

使用特权

评论回复
34
isbit| | 2009-10-12 17:57 | 只看该作者
LS正解,但是应避免此类写法;很容易让人懵

使用特权

评论回复
35
511| | 2009-10-31 20:33 | 只看该作者
关注,,

使用特权

评论回复
36
求取真经| | 2009-11-3 09:24 | 只看该作者
我也关注下,

使用特权

评论回复
37
zhaoqiangno1| | 2009-11-5 22:12 | 只看该作者
长见识了:L

使用特权

评论回复
38
yxwsz| | 2009-12-16 21:45 | 只看该作者
写这种代码的人应该脱裤子打屁股!!

使用特权

评论回复
39
jzy23| | 2009-12-23 18:40 | 只看该作者
在不同编译器下,自然会些不同了。

使用特权

评论回复
40
byeyear| | 2010-1-2 13:28 | 只看该作者
看到楼上很多人说"先用后加",“先加后用”,忍不住说两句。
不管i++还是++i,都是“先加后用”,绝不存在“先用后加“的情况。
其区别在于,一个用加以前的值,一个用加以后的值。
举例:
j=i++;
分析:
1. 这是一个表达式
2. 可以分解为两个子表达式:后置++,赋值。
3. 后置++优先级高于赋值,首先执行++, i值加一(先加);
4. 然后执行赋值,将右表达式值赋给左值。右边子表达式的值为加以前的值,因此j为i加以前的值(后用)。
要理解这个问题,最好先弄明白什么是表达式,什么是表达式的值。

使用特权

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

本版积分规则