发 帖  
原厂入驻New
[讨论]

keil c中没有使用到的函数会编译时候会有警告

2011-10-9 13:33:01  9764 编译
分享
想写一个模块,模块里面有我常用的一些功能函数,比如:
a.h文件



  1. #ifndef _a_h_
  2. #define _a_h_

  3. extern void one(void);
  4. extern void two(void);

  5. #endif

  6. a.c文件

  7. #include "a.h"

  8. extern void one()
  9. {
  10.    ........
  11. }

  12. extern void two()
  13. {
  14.    .........
  15. }

  16. main.c

  17. #include <reg52.h>
  18. #include "a.h"

  19. void main()
  20. {
  21.    while(1)
  22.    {
  23.      one();
  24.    }

  25. }

复制代码

我只使用了a.h文件中定义的一个函数one,two没有用到
keil 编译的时候给出警告

有什么方法能让没有使用过的函数,不进行连接编译?

那keil c的库又是怎么样弄的?
1
2011-10-9 13:33:01   评论 分享淘帖
10 个讨论
把函数做成宏定义如何  

#define one()  do{...}while(0);
2011-10-9 13:33:35 评论

举报

每个.C文件中只写一个函数
2011-10-9 13:34:06 评论

举报

设置屏蔽等级,忘了是6,13,还是16,试试就知道了,条件编译也行
2011-10-9 13:34:41 评论

举报

人家怎么知道你没有调用呢?调用不一定是显式的,也许是修改堆栈,也许是用函数指针,方法多得很,编译器无法知道你是否会调用到该函数,在它的"眼"里,存在即为合理.

所以,没有用到的函数你可以用#if #endif封闭起来
2011-10-9 13:35:44 评论

举报

这个问题还是没有解决,有谁知道吗?

我再增加一些问题,网上找了半天没有解决

1.  编译器没有被调用才出现警告,编译器肯定知道这个函数没有被调用.

2.  #if #endif怎么用,难道我需要调用这个函数,另外还需要define一个表示我调用了?这也太麻烦了,
   keil中调用库函数是怎么实现,没见到要怎么作啊

3.  库函数编译的存储方式如果与主程序不同也警告,同样keil本机库函数调用也没有这个警告,不知道如何消除

4.  屏蔽等级如何设置,好像只是设置优化等级的

5.  #pragma WARNINGLEVE(0) 指令怎么不能用,警告"此行被忽略",并且取消报警也不是我目的,我发现删除这个函
    数和没有删除目标代码大小是不一样的

6.  #pragma rom(small)也不能用 "XXXX.C(129): error C252: misplaced primary control, line ignored"
2011-10-9 13:36:50 评论

举报

在keil4中,用LX51代替BL51连接器,然后再Misc control里添加REMOVEUNUSED这条指令,据说可以,不过我也没验证过.
2011-10-9 13:37:58 评论

举报

这是不可能消除的.

程序无法知道你不会调用它,因为你有可能使用非直接调用的指令,而是用散列指针之类的方法,程序是预测不到的,所以它不会给你做优化.

如果你真想消除警告,就用#if #endif把它"软删除"掉.
2011-10-9 13:38:45 评论

举报

本帖最后由 心如明镜 于 2011-10-9 13:40 编辑

我用7楼的方法是可以去除不用的代码。但是今天遇到了问题,函数指针指向的函数不存在了。这就是间接引用的问题吧。
有没有什么 #pragma 可以告诉链接器不要把指定的函数去掉呢?我现在去掉了 REMOVEUNUSED ,但是编译后说DATA区溢出了。
2011-10-9 13:39:57 评论

举报

我也用7楼的方法 可以 而且我从来不用指针 嘿嘿
2012-5-8 08:20:05 评论

举报

7楼说的方法只能消除警告,但是没使用的函数还是生成代码了
2017-4-21 16:19:14 评论

举报

撰写讨论

你正在撰写讨论

如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发讨论
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表