当我在最新版本的gcc中编译C代码时,我收到以下警告:
Function is define but not used.
这个警告的原因是什么,我该如何解决?
答案 0 :(得分:2)
这可能是从未使用的静态功能。如果我是对的,警告基本上说“你写了一些你实际上没用的代码,所以你浪费了记忆,你的程序比你需要的还大”。
此致
答案 1 :(得分:2)
编译器正在发出一个警告,即程序员已经努力编写一些永远不会被使用的东西。
这可能是故意发生的:也许程序还没有完成,并且按照良好的做法,即使在连接所有部件之前,程序也会提前编译并经常编译。
这也可能是偶然发生的:或许程序员犯了一个诚实的错误,意味着要使用某些东西但是没有,可能是由于命名含糊不清等。
由于它不是错误,友好编译器只给出警告。
答案 2 :(得分:2)
作为Giuseppe Guerrini mentioned,这很可能是一个静态函数 - 你不会在非静态函数上看到这个警告。原因是编译器必须假定可以从另一个编译单元调用非静态函数。但是,静态函数在它所在的C文件之外是不可见的,所以如果它没有在该文件中使用,那么根本就不能使用它。
如果发现自己通常会因为这些警告而烦恼,因为:
具有该功能通常没有负面影响 - 甚至是代码空间。如果没有使用,大多数链接器今天将从可执行映像中删除代码。
我经常在预期使用它时定义一个函数,警告会导致构建发出诊断信息。我更喜欢我的构建是无警告的,但在这些情况下,我希望编译函数 - 准备好在下一部分工作时使用。
我可能只有在调试版本中调用的代码,比如在断言(或某些有条件编译的代码)中。但是,我并不是条件编译的忠实粉丝,并且希望尽可能少地使用#if
语句。所以我的偏好是让那些不的函数有条件地编译,即使它们只是在特定配置中被调用。
就我而言,警告几乎没用,如果你愿意的话可以关掉它们。 (我想听听可能会改变我的想法......)