MDK (keil) 没有使用到的函数编译时候会有警告的解决
2018-01-11 17:20
351 查看
在使用MDK编写STM32代码时,有些函数如果没用到会报警告:
函数定义如下:
但是STM32有很多库函数,为什么没使用到的就不会报警告呢?
这里有一个编译细节,就是函数的有效范围问题。库函数并没有使用static关键字,因为它可能会给其他文件使用,所以编译器会进行全编译,不做整个工程的调用检查,所以也不会报错,但是这样编译出来的HEX文件会大。
而我写的函数明确指定了static,因此编译器缩小了检查范围,因为在该文件中并没有使用到该函数,所以很智能地发出警告,同时不把函数编译进HEX,所以编译出来的HEX会小,虽然有警告,但这是个比较好的编程风格。
以上是出现警告的原因,那有没有方法既缩小HEX,又不报警告呢?
如果坚持要使用比较好的static方式,一定会有警告,没有办法。
要想没有警告,就不能使用static,效仿库函数,MDK编译器提供了一种专门手段用于缩小库函数的,可以借来使用,在编译选项中把”为每个函数生成一个单文件“勾上:
在勾上它之前:
勾上它之后:
可以看出,没用的函数没有被编译进最终的HEX文件,并且不会报错。
函数定义如下:
但是STM32有很多库函数,为什么没使用到的就不会报警告呢?
这里有一个编译细节,就是函数的有效范围问题。库函数并没有使用static关键字,因为它可能会给其他文件使用,所以编译器会进行全编译,不做整个工程的调用检查,所以也不会报错,但是这样编译出来的HEX文件会大。
而我写的函数明确指定了static,因此编译器缩小了检查范围,因为在该文件中并没有使用到该函数,所以很智能地发出警告,同时不把函数编译进HEX,所以编译出来的HEX会小,虽然有警告,但这是个比较好的编程风格。
以上是出现警告的原因,那有没有方法既缩小HEX,又不报警告呢?
如果坚持要使用比较好的static方式,一定会有警告,没有办法。
要想没有警告,就不能使用static,效仿库函数,MDK编译器提供了一种专门手段用于缩小库函数的,可以借来使用,在编译选项中把”为每个函数生成一个单文件“勾上:
在勾上它之前:
勾上它之后:
可以看出,没用的函数没有被编译进最终的HEX文件,并且不会报错。
相关文章推荐
- MDK (keil) 没有使用到的函数编译时候会有警告的解决
- keil (mdk) 中 在编译时,去掉没有使用的函数,减小代码量
- [Keil]ads工程移植到Keil MDK 编译出现的警告和错误解决
- 编译华天正源码的时候终端会在没有编译完的情况下直接退出的解决方法
- 怎么解决STM32(MDK)中不能使用printf()函数的问题
- 解决使用libpq时提示一系列SSL相关函数没有定义导致编译失败的问题
- Flex使用ant编译的时候无法加载css样式表中的图片解决方法
- 如何解决标准C库的函数在vs上使用时出现的警告
- vc6.0使用PathFileExists(...)函数的时候链接错误的解决办法
- 105-使用GData进行DOM解析XML的时候,最初编译会报错,解决办法
- 解决STM32在MDK-ARM(KEIL)编译时出现 已停止工作
- 解决 Eclipse 下使用 Ant 编译出现问题: 警告:编码 GBK 的不可映射字符
- Win7 64b的VS2015 如何使用nmake成功编译detour express 3.0-error2202 警告被视为错误 - 没有生成“object”文件
- 怎么解决windows下使用eclipse和python编译时候 "Non-ASCII character"错误问题
- eWebEditor在IE8中使用时候总是报错“没有对象”。解决办法如下:
- rails 4.0 中使用 cap 发布的时候,出现 LD_LIBRARY_PATH 没有设置的问题 的解决办法
- C++程序编译的时候报错prototype for '类名::函数名'does not match any in class'类名'解决经验。
- 解决KEIL的逻辑分析仪( logic analyzer)的各种问题及调试时候peripherals下面没有外设选项的问题
- Java中使用com.sun相关jar包出现编译错误,但是运行没有错误的解决方法和原因
- linux下编译出现 "警告:隐式声明与内建函数'exit'不兼容" 的解决方法