| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3242 人关注过本帖, 1 人收藏
标题:求助,关于自增的问题 也许你没见过
只看楼主 加入收藏
xteet
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-9-12
收藏
得分:0 
回复 19# 的帖子
谢谢 一个老手对一个新手的批评指教。不过对于一个刚学到函数的新手有点难度去理解。再次感谢这位老师,又让我找到了一个学习的途径。
2008-04-30 21:58
纨酷子帝
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-4-30
收藏
得分:0 
四楼的,第一个i用完后就++了

编程高手 QQ群:19728471。只为交流,共同进步,非诚勿扰!
2008-05-01 01:53
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
[bo]以下是引用 [un]StarWing83[/un] 在 2008-4-29 23:24 的发言:[/bo]

况且,TC出现的时候,还没有标准。不遵 ...

1.Turbo C 2.01 发布时间是89年5月11日,ANSI C最早版本是1983年制定的,1987年,ANSI又公布了87 ANSI C。而后又发布了 C89,C99 以后肯定还会有新的标准,Turbo C 2.01遵循的是C89
2.C标准可以看作是C语言使用者和C编译器实现者之间的协议,一种规范。C编译器实现者在不违反协议的原则下可以自由地按自己的方式来实现这个规范,这就是造成LZ问题的原因。
例如:A实现者  i=( ++i ) + (i*5)这个算式是从左往右算
而 B实现者  i=( ++i ) + (i*5)这个算式是从右往左算 这个对C标来说都是充许的,但两者的结果就不同。
3。没有一个C编译器实现者不对C标进行扩充,而且没有一个C编译器实现者是100%按C标准实现的

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2008-05-01 09:53
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
另外,个人认为C主要方向是底层系统软件,精简、高效率才是C标应该追求的东西,所以相对来说,我更喜欢C89而不是C99,C99有点累赘了,很多东西都是累赘,C99中值得说道的就是可以在for中直接申明变量,for(int i.....),还有一个就是"//"方便了许多

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2008-05-01 10:15
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
警告: ‘i’上的运算结果可能是未定义的
#include "stdio.h"
int main()
{
        int i=4, y;
        y=(i++) + (i++);
        printf("%d", y);
        return  0;
}

8在我这是这个结果。由于自增运算符必须是左值,个人认为只有这个结果的搭配。
    movl    $4, -8(%ebp)         #就是i
    movl    -8(%ebp), %eax
    addl    -8(%ebp), %eax       #结果为8=%eax
    movl    %eax, -12(%ebp)      # i=4  %eax和-12(%ebp)都是8
    addl    $1, -8(%ebp)         #i++  结果在-8(%ebp)
    addl    $1, -8(%ebp)         #i++
    movl    -12(%ebp), %eax      # -12(%ebp)=8=%eax
    movl    %eax, 4(%esp)        #参数2  y
    movl    $.LC0, (%esp)        #参数1  "%d"
    call    printf
不同编译器可能不同吧
但我的编译器是这样实现的 :
    addl    $1, -8(%ebp)         #i++  结果在-8(%ebp)
    addl    $1, -8(%ebp)         #i++
不知道你们的是什么样,初学,可能说的不对,给批评教育

[[it] 本帖最后由 c_acceleration 于 2008-5-1 11:12 编辑 [/it]]

天道酬勤
2008-05-01 10:52
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
[bo]以下是引用 [un]Knocker[/un] 在 2008-5-1 10:15 的发言:[/bo]

另外,个人认为C主要方向是底层系统软件,精简、高效率才是C标应该追求的东西,所以相对来说,我更喜欢C89而不是C99,C99有点累赘了,很多东西都是累赘,C99中值得说道的就是可以在for中直接申明变量,for(int i.....),还有一个就是" ...



for(int i.....),我最恨它了,一般程序都习惯在程序开始初始化,它突然半路出来,会不会影响我的效率啊和布局啊。

天道酬勤
2008-05-01 11:25
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
[bo]以下是引用 [un]c_acceleration[/un] 在 2008-5-1 11:25 的发言:[/bo]
for(int i.....),我最恨它了,一般程序都习惯在程序开始初始化,它突然半路出来,会不会影响我的效率啊和布局啊。

看来你还不清楚尽可能地压榨一个变量的作用域的意义
一个变量或者对象,作用域越小越好,全局的东西越少越好
当然,未必绝对

[color=white]
2008-05-01 11:41
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
同意ls,在需要的地方才创建变量,在不需要的地方释放是我最想达到的
估计ls的ls没有见过有人写的代码,函数开始定义了一堆变量,
可是每个分支只用其中的一部分,时间和空间效率都低

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-05-01 11:56
ll431
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-4-17
收藏
得分:0 
谭浩强的那本书里面 明确说了,关于这类问题,有的TC执行顺序是不一样的。
2008-05-01 12:00
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
[bo]以下是引用 [un]moonwalker[/un] 在 2008-5-1 11:56 的发言:[/bo]

同意ls,在需要的地方才创建变量,在不需要的地方释放是我最想达到的
估计ls的ls没有见过有人写的代码,函数开始定义了一堆变量,
可是每个分支只用其中的一部分,时间和空间效率都低 ...


批评教育啊
你们随便说,我看我的
提高C++性能的编程技术
也许我看的这本书很垃圾。。。

[[it] 本帖最后由 c_acceleration 于 2008-5-1 12:47 编辑 [/it]]

天道酬勤
2008-05-01 12:46
快速回复:求助,关于自增的问题 也许你没见过
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020621 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved