MDK (keil) 没有使用到的函数编译时候会有警告的解决

在使用MDK编写STM32代码时,有些函数如果没用到会报警告:

函数定义如下:


但是STM32有很多库函数,为什么没使用到的就不会报警告呢?

这里有一个编译细节,就是函数的有效范围问题。库函数并没有使用static关键字,因为它可能会给其他文件使用,所以编译器会进行全编译,不做整个工程的调用检查,所以也不会报错,但是这样编译出来的HEX文件会大。

而我写的函数明确指定了static,因此编译器缩小了检查范围,因为在该文件中并没有使用到该函数,所以很智能地发出警告,同时不把函数编译进HEX,所以编译出来的HEX会小,虽然有警告,但这是个比较好的编程风格

以上是出现警告的原因,那有没有方法既缩小HEX,又不报警告呢?

如果坚持要使用比较好的static方式,一定会有警告,没有办法。

要想没有警告,就不能使用static,效仿库函数,MDK编译器提供了一种专门手段用于缩小库函数的,可以借来使用,在编译选项中把”为每个函数生成一个单文件“勾上:


在勾上它之前:


勾上它之后:


可以看出,没用的函数没有被编译进最终的HEX文件,并且不会报错。


展开阅读全文

没有更多推荐了,返回首页