打印
[51单片机]

keil对51单片机变量和函数的编译处理

[复制链接]
400|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
functions|  楼主 | 2019-10-21 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
functions|  楼主 | 2019-10-21 10:58 | 只看该作者
(2)未初始化的局部变量

    实际的编译后的反汇编程序也看不到这些局部变量的初始化。这些局部变量占据哪些还未被使用的内存或者其他函数中局部变量释放的空间。倘若是后者,其他函数局部变量释放的空间并没有清零,所以使用这些释放空间的局部变量就一开始被赋值了,这是需要程序员小心的。

void function()
{
unsigned char k,j; //k,j都未被初始化
if(k<j) ;
else{
}
}

使用特权

评论回复
板凳
functions|  楼主 | 2019-10-21 10:58 | 只看该作者
(3)函数的优化

实验代码

void function()
{
unsigned char i,j,k;
i=j+k;
}


编译结果:如下函数的内容经过keil的编译后,就变成了“REI”,也就是说function的内容全被忽略掉。

解释:keil对程序进行了优化,由于function的内容并没有任何作用,所以优化时就把这些内容忽略掉。倘若在变量前边加上“volatile”,这部分内容就不会被忽略。

使用特权

评论回复
地板
hobbye501| | 2019-10-21 12:59 | 只看该作者
大部分编译器。。。都会赋初值的

使用特权

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

本版积分规则

39

主题

446

帖子

1

粉丝