[程序源码] 程序有很多行没有被编译,为什么。

[复制链接]
1983|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;

但是我这几条并不是没有用的语句,也被优化掉了,怎么办?
 楼主| wwxxly 发表于 2014-11-24 16:47 | 显示全部楼层
ningling_21 发表于 2014-11-24 09:11
不是没编译,只是相同 的语句被编译器统一归并到一处执行了

这些语句不能比合并处理啊,没有这几条语句程序就有问题了
cjseng 发表于 2014-11-24 16:58 | 显示全部楼层
建议看一下编译后的汇编代码,估计是合并到别处去了。
ningling_21 发表于 2014-11-24 17:53 | 显示全部楼层
wwxxly 发表于 2014-11-24 16:47
这些语句不能比合并处理啊,没有这几条语句程序就有问题了

合并处理,不是不执行,而是重复的几处语句只执行一处
sedatefire 发表于 2014-11-24 18:00 | 显示全部楼层
把你的start和write贴出来吧
是不是编译器就是“看不到”,你有多处定义这两个函数吗?
放在同一.c文件看看
linqing171 发表于 2014-11-24 20:05 | 显示全部楼层
可能是这三个函数老是同时出现,所以被合并了 俗称inline
coody 发表于 2014-11-25 09:21 | 显示全部楼层
对的,优化把没意义的忽略,还把相同功能的作为一个子函数调用。
呆板书生 发表于 2014-11-25 12:55 | 显示全部楼层
其实没有那么复杂,编译没问题,只是start() 和 write () 这两个函数在链接的时候找不到,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部