在Keil uVision4中,用C语言,不调用的子程序,会不会编译?

在编译8051时,如果有一个或者多个子程序没有被调用,就会有警告,说有程序没有被调用。而且没有调用的子程序代码,也会被编译;在编译ARM(LPC1768)时,有子程序没有... 在编译8051时,如果有一个或者多个子程序没有被调用,就会有警告,说有程序没有被调用。而且没有调用的子程序代码,也会被编译; 在编译ARM(LPC1768)时,有子程序没有被调用,不会有警告,不调用的程序有不会编译为代码。 问题:这两者都是用相同软件,有何区别?为什么8051不可以自动不编译没有调用的子程序?
这是我自己亲自试过的,ARM编译时,确实如此,我想知道Cx51,MDK两者的设计的不同,及资料。
展开
 我来答
一剑出血
高粉答主

推荐于2017-09-24 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
1. “这两者都是用相同软件,有何区别?”
是不同的软件。

2. “为什么8051不可以自动不编译没有调用的子程序?”
因为用户可能在汇编中隐式调用某个字程序。
对于你所说“在编译ARM(LPC1768)时,有子程序没有被调用,不会有警告,不调用的程序有不会编译为代码”我持怀疑态度。

不管哪种方式编程都很有可能隐式调用函数的,如通过函数指针。所以不编译非显式调用的子程序是明显违反编程人员意图的行为。两种可能:默认项目设置不当;或者对这类子程序需要添加特别的类型说明或编译开关。
想知道两种编译套装的区别,最好的资料就是其自带的说明文档。那几十兆的说明文档看下来包你受益无穷。
kekelight
推荐于2017-09-23 · TA获得超过177个赞
知道答主
回答量:57
采纳率:100%
帮助的人:36万
展开全部
你好,我也用这款软件,更正一个观点:不调用的子程序(module模块),编译器仍旧编译,占用空间,只是不链接,这个可以在输出的汇编中看到分配的段。其次编译是8051有告警是你IDE里告警选项设置问题,可以设置为不告警。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友87dee1c
2012-03-21 · TA获得超过215个赞
知道答主
回答量:209
采纳率:45%
帮助的人:53.2万
展开全部
开发编译工具的开发人员的思维方式不用,当然开发出来的工具也存在差异。
没调用的程序被编译很正常啊,VC就是这样的,只要不连接到生存的HEX文件中就可以了。
问题的关键是在于生成的HEX文件有没有包含没调用但编译了函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
786308695
2012-03-16 · TA获得超过110个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:91万
展开全部
软件的属性问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式