隐式声明函数和冲突类型警告

时间:2014-06-14 17:20:20

标签: c conflict implicit-declaration

我目前正在用C编写程序。一切正常,但在尝试'make'时我收到了一些警告:

src/command.c: In function ‘cmd_create’:
src/command.c:43:3: warning: implicit declaration of function ‘iterator_init’ [-    Wimplicit-function-declaration]
   iterator_init(&it);
   ^
src/command.c:49:6: warning: implicit declaration of function ‘iterator_destroy’ [-    Wimplicit-function-declaration]
      iterator_destroy(&it);
      ^
src/command.c: At top level:
src/command.c:218:6: warning: conflicting types for ‘iterator_init’ [enabled by default]
 void iterator_init(iterator *it) {
      ^
src/command.c:43:3: note: previous implicit declaration of ‘iterator_init’ was here
   iterator_init(&it);
   ^
src/command.c:245:6: warning: conflicting types for ‘iterator_destroy’ [enabled by     default]
 void iterator_destroy(iterator *it) {
      ^
src/command.c:49:6: note: previous implicit declaration of ‘iterator_destroy’ was here
      iterator_destroy(&it);
      ^

我的研究表明,这通常发生在实际通话后声明功能。

但是我已经正确地将函数的原型放在我的头文件中,所以想知道还有什么可能导致这个问题。我的makefile可能设置不正确吗?

我的申请来源位于https://github.com/fish-guts/concurrent

1 个答案:

答案 0 :(得分:0)

在声明之前使用函数。 C语言允许隐式声明(最好不要使用它们),并自动声明函数 - 但隐式规则非常严格。稍后你定义了函数,但是它的原型与自动生成的函数不匹配。

可能的解决方案是:

  • 使用前定义功能
  • 使用前声明功能
  • 包含您的“command.h”,其中包含声明(这是该特定情况下的最佳选择)