-3

私は現在、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);
      ^

私の調査によると、これは通常、実際の呼び出しの後に関数が宣言されたときに発生します。

ただし、関数のプロトタイプをヘッダー ファイルに適切に配置したので、他に何が原因なのか疑問に思っていました。メイクファイルが正しく設定されていない可能性がありますか?

https://github.com/fish-guts/concurrentにある私のアプリケーションのソース

4

1 に答える 1

0

宣言される前に関数を使用しています。C 言語は暗黙の宣言を許可し (それでも使用しないほうがよい)、関数を自動的に宣言しますが、暗黙の規則は非常に厳密です。後で関数を定義しますが、そのプロトタイプは自動生成されたものと一致しません。

考えられる解決策は次のとおりです。

  • 関数を使用する前に定義する
  • 関数を使用する前に宣言する
  • 宣言を含む「command.h」を含めます(これは、その特定の場合に最適なオプションです)
于 2014-06-14T17:30:54.737 に答える