打印

KEIL C51 到底在干什么?

[复制链接]
3567|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ljm810010|  楼主 | 2010-7-1 12:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2010-7-1 13:02 | 只看该作者
unsigned char x=0;
这条语句需要库函数支
...

使用特权

评论回复
板凳
ljm810010|  楼主 | 2010-7-1 13:19 | 只看该作者
2# ayb_ice

大侠能具体说说吗?

使用特权

评论回复
地板
ayb_ice| | 2010-7-8 11:01 | 只看该作者
都说了是调用库函数
软件仿真一下便知,看反汇编

使用特权

评论回复
5
ljm810010|  楼主 | 2010-7-8 11:10 | 只看该作者
哦,都试过了,就是多了一大堆代码,也看不懂。我想知道这一大堆代码是干嘛用的,直接赋个0不就行了吗,还要搞这么多有何目的?当然编译器总是有它的理由,就是不明白它的目的何在,也就是说如果没有这大堆代码的处理过程,将会出现什么样的BUG?

使用特权

评论回复
6
ayb_ice| | 2010-7-8 11:23 | 只看该作者
这一堆代码就是为变量初始化定制的
不是说赋个0那么简单
因为至少要考虑:
1: 如果很多变量都要初始化
2: 不同类型的变量都要初始化
3: 初始化为不同的值
4: 这些功能必须在main之前搞定


...

必须要有一个通用程序搞定这些,当然就不是那么简单的事了
...

使用特权

评论回复
7
byeyear| | 2010-7-8 11:24 | 只看该作者
C运行环境语言初始化
几乎所有的程序都需要三个section:
代码(code),需要赋初值的变量(data),赋默认初值为0的变量(zidata, Zero Initialize data)。
第一个程序全局变量x默认会被编译器初始化为0,所以分配到zidata section;
第二个程序虽然x也是0,但这个初值是你显式指定,所以分配到data section;
多出来的代码部分是初始化data section的,第一个程序没有data section;

不过如果你调高优化级别,第二个程序的x有可能也被挪到zidata section

使用特权

评论回复
8
ljm810010|  楼主 | 2010-7-8 11:37 | 只看该作者
算是明白了,谢谢楼上两位。

使用特权

评论回复
9
chinaupu| | 2010-7-8 11:54 | 只看该作者
顶了,学习一下。

使用特权

评论回复
10
大道至简| | 2010-7-8 12:01 | 只看该作者
多出来的是启动代码
就是在执行你的main之前,先清理现场一下

使用特权

评论回复
11
linqing171| | 2010-7-8 12:20 | 只看该作者
6楼7楼正解。
对于这种现象,我用过的编译器,做的最好的是CCS C。

使用特权

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

本版积分规则

38

主题

1195

帖子

0

粉丝