2010-03-11 27 views
0

当我在最近版本的GCC编译C代码,我得到以下警告:具体原因如下警告

Function is define but not used. 

有什么可以为这个警告的原因以及如何接近解决它?

+9

嗯,因为你已经定义了一个叫Function的东西,但没有用过它?我看不出诊断可能更清楚。 – 2010-03-11 23:15:45

+1

我认为thetna可能会更多地了解警告背后的基本原理,或者为什么警告会出现在一些未使用的函数中,但不是所有的函数,而不是这个特定实例的原因(但是我可能读了太多的问题) 。 –

回答

2

由于Giuseppe Guerrini mentioned,这可能是一个静态函数 - 你不会看到非静态的这个警告。原因是编译器必须假定可能会从另一个编译单元调用非静态函数。但是,静态函数在它所在的C文件之外是不可见的,所以如果它不在该文件中使用,那么它根本无法使用。

如果发现自己一般由这些警告烦躁,因为:

  1. 通常没有负面影响,从具有功能 - 即使代码空间。如果未使用,大多数连接器将从可执行映像中删除代码。

  2. 我经常定义一个函数以预期它被使用,并且警告会导致构建发出诊断。我更喜欢我的构建是没有警告的,但是在这些情况下,我希望编译这个函数 - 当下一步工作得到实现时,可以使用它。

  3. 我可能只会在调试版本中调用代码,如在断言(或某些有条件编译的代码)中。然而,我并不是有条件编译的忠实粉丝,并且希望尽可能少地使用#if声明。因此,我的偏好是将这些函数而不是进行有条件编译,即使它们仅在特定配置中被调用。

就我而言,警告的用处不大,如果你喜欢,也许可以关闭它们。 (我想听听可能会改变我的想法的意见...)

+0

因为这是GCC,所以警告有时可以解释为“你忘记标记你的'static'函数'__inline__'(如果你在C99上,则是'inline')继续,你知道你想要的,只是试一试“。不过,更像是“唠叨”而不是“警告”。我猜“未使用的函数”警告的精神类似于Java中某些不可达代码的编译错误('throw new Exception(); return;')的精神。 –

+0

此警告可能有更微妙的原因。假设“静态”关键字已被无意中添加,但该功能旨在公开。请注意,如果你正在生成一个静态库,只有库的最终用户会注意到这个函数没有被导出(好吧,你应该在分发之前测试你的库,不是吗?))。 –

2

这可能是一个从不使用的静态函数。如果我是对的,这个警告基本上说“你写了一些你实际上没有使用的代码,所以你正在浪费内存,你的程序比需要的大”。

问候

2

编译器给予警告,程序员已经把写的东西,从来没有被使用的努力。

这可能是故意发生的:也许程序还没有完成,并且作为一种良好的做法,该程序即使在所有部件连接之前都会提前编译并编译。因为它是不是一个错误,友好的编译器可能是程序员做一个诚实的错误,这东西本来是用来但没有,可能是由于命名歧义等

这也意外发生只给出警告。

相关问题