编译器玄学报告第四期——成也warning,败也warning
Posted 裸机思维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译器玄学报告第四期——成也warning,败也warning相关的知识,希望对你有一定的参考价值。
忙活了ban
【说在前面的话】
今天一大早醒来,就看到嵌入式大号把最新版本的MDK 5.33给“挂了”出来:
想不到国内嵌入式圈子还有这么多跟我一样天天盯着MDK编译器不放恨不得第一个发现Bug的人——既然被人捷足先登了,就不妨来看看究竟是个怎样的Bug。
在文章的一开头,文章作者直接而清晰的给出了结论:
“
用最新版的Keil for ARM 5.33版本做407开发板的开发,自己创建的工程怎么都没法正常编译,不是有错就有几十个警告。 ”
gaoyang9992006,公众号:嵌入式ARM
这里“
有错误和
几十个警告”显然预示着这是一个
MDK的大瓜,看来必须要吃!
这里的错误和警告,
对一般程序员来说,应该就是编译结果的 Error和Warning吧?作为一个跟文章作者一样有代码洁癖的
处女座(我的确是处女座),
Error和Warning绝对不能忍!
既然是要吃瓜,首先第一步当然是复现问题,顺着原作者提供的步骤,首先就是要准备环境:
接着是下载作者所使用的芯片支持包,很遗憾的是,作者使用的芯片支持包无法从MDK自带的Pack Installer里直接下载获得——显然芯片厂家还没有使用MDK作为自己的正式芯片发布渠道——只能去官网下载……
然而……作者提供的链接居然不能直接点开……(是纯文字)
这……还要我自己找……还好问题不大,有www.arterytek.com和AT32F4的两个关键字,很容易找到:
这里,我放下完整的链接:
http://www.arterytek.com/download/Pack_Keil_AT32F4xx_CH_V1.3.5.zip
【建立工程】
安装好芯片支持包以后,我们开始建立工程。按照,原文,我们需要选择一个AT32F407的芯片:
可惜截图里作者没有提到具体选哪个芯片型号,因为我看到的界面是这样的:
也就是说,在 AT32F407下还有很多子型号……考虑到子型号差异可能跟这个bug关系不大,所以作者省略了这部分信息吧。于是我也随便选了一个,进入到RTE配置环节。
【RTE配置】
在原文中的截图中,我们注意到,RTE配置中,作者只选择了 GPIO模块,由于可能缺失了一些必要的支持库,MDK通过两种方法给出了明确的Warning信息:
由于我之前对MDK比较熟悉:知道MDK会聪明的给出警告,同时也知道,很多情况下,只要单击 Resolve按钮,MDK就会自己替你解决问题:
果然,在单击Resolve后Warning消失了,所有选中的模块都变成了绿色。
我观察了下原文,没有提到这里的细节,估计是作者也顺手解决了吧。(然而事后证明我大意了,没有闪)
【工程编译】
在加入了main.c后,我也开始了编译。然而……我翻车了?并没有出现严重的编译错误:
什么情况?说好的瓜呢?
0 Error 5 Warning(s)?
突然想起来,
是不是因为我自作聪明在RTE配置的时候处理了MDK给我的warning——单击了Resovle?
为了验证我的猜想,我重新配置了RTE,编译后结果如下:
我擦,来了来了,4个Error,60个Warning!虽然跟原文88个warning比少了不少……但至少算是复现了问题。
但,说好的瓜呢?这明显是个MDK通过Warning告知了我们随手Resolve就可以解决下的问题,算不上MDK的Bug吧……
【就事论事说Warning】
好吧,瓜没吃成,我们再来看看之前剩下的5个warning,毕竟原文作者说用armcc(arm compiler 5)就可以做到 0 Error 0 Warning。
armcc不报告很多warning恰恰是因为armcc其实不是一个很优秀的编译器,很多主流编译器,比如 gcc,llvm,IAR都会注意到的值得warning的问题,armcc都会忽略……
既然可以掩耳盗铃,我们不妨试试看把Arm Compiler 6的warning模式变得跟 armcc一样:
把这里的 All Warnings改为AC5-like Warnings:
忙活了半天,没吃上瓜,我内心是很遗憾的。
虽然我常年给MDK找碴,但不管咋说,
MDK已经通过颜色和文字把他检测到的问题告知我们了啊?硬要说这是MDK的问题,
MDK也在文档里写清楚这种Warning机制啦……
最后关于大家对armcc的谜之信任,我还是想重复下那句话:
armcc不报告很多warning恰恰是因为armcc其实不是一个很优秀的编译器,很多主流编译器,比如 gcc,llvm,IAR都会注意到的值得warning的问题,armcc都会忽略……
如果你喜欢我的思维、觉得我的文章对你有所启发,
请务必 “点赞、收藏、转发” 三连,这对我很重要!谢谢!
欢迎订阅 裸机思维
以上是关于编译器玄学报告第四期——成也warning,败也warning的主要内容,如果未能解决你的问题,请参考以下文章
成也科幻,败也科幻
成也抽象,败也抽象。何哉?
面试了一位7年软件测试工作者:成也“7”年,败也“7”年
比亚迪成也闭环,败也闭环:4星|《财经》2018年第12期
成也陈乔恩,败也东方不败霍建华版《笑傲江湖》全剧评
前端面试一位7年工作者:成也“7”年,败也“7”年