打印
[程序源码]

程序有很多行没有被编译,为什么。

[复制链接]
1624|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwxxly|  楼主 | 2014-11-23 22:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

用C写的单片机程序,编译未报错,但仔细看有很多行没有被编译,用伟福和keil两个编译环境均是这种结果。程序没有发现什么问题,不知道是为什么,请哪位大哥解释一下,小弟万分感谢。
绿色的行就是没有被编译的,程序就没有执行这几行,不知为什么。程序中还有很多行是这个样子。

相关帖子

沙发
coody| | 2014-11-23 22:59 | 只看该作者
有一种功能叫做“优化”,编译器把认为没有意义的语句忽略掉。比如:
u8 i;

i = 8;
for(i=0; i<100; i++)  ;

那么,1 = 8 这句,编译器认为没意义,不编译,优化掉了。

使用特权

评论回复
板凳
ningling_21| | 2014-11-24 09:11 | 只看该作者
不是没编译,只是相同 的语句被编译器统一归并到一处执行了

使用特权

评论回复
地板
wwxxly|  楼主 | 2014-11-24 16:46 | 只看该作者
coody 发表于 2014-11-23 22:59
有一种功能叫做“优化”,编译器把认为没有意义的语句忽略掉。比如:
u8 i;

但是我这几条并不是没有用的语句,也被优化掉了,怎么办?

使用特权

评论回复
5
wwxxly|  楼主 | 2014-11-24 16:47 | 只看该作者
ningling_21 发表于 2014-11-24 09:11
不是没编译,只是相同 的语句被编译器统一归并到一处执行了

这些语句不能比合并处理啊,没有这几条语句程序就有问题了

使用特权

评论回复
6
cjseng| | 2014-11-24 16:58 | 只看该作者
建议看一下编译后的汇编代码,估计是合并到别处去了。

使用特权

评论回复
7
ningling_21| | 2014-11-24 17:53 | 只看该作者
wwxxly 发表于 2014-11-24 16:47
这些语句不能比合并处理啊,没有这几条语句程序就有问题了

合并处理,不是不执行,而是重复的几处语句只执行一处

使用特权

评论回复
8
sedatefire| | 2014-11-24 18:00 | 只看该作者
把你的start和write贴出来吧
是不是编译器就是“看不到”,你有多处定义这两个函数吗?
放在同一.c文件看看

使用特权

评论回复
9
linqing171| | 2014-11-24 20:05 | 只看该作者
可能是这三个函数老是同时出现,所以被合并了 俗称inline

使用特权

评论回复
10
coody| | 2014-11-25 09:21 | 只看该作者
对的,优化把没意义的忽略,还把相同功能的作为一个子函数调用。

使用特权

评论回复
11
呆板书生| | 2014-11-25 12:55 | 只看该作者
其实没有那么复杂,编译没问题,只是start() 和 write () 这两个函数在链接的时候找不到,

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝