警告:組み込み関数 'xyz' の暗黙の宣言に互換性がありません

C では、以前に宣言されていない関数を使用すると、関数の暗黙的な宣言が構成されます。暗黙の宣言では、戻り値の型は int です 私の記憶が正しければ。現在、GCC にはいくつかの標準関数の定義が組み込まれています。暗黙の宣言が組み込み定義と一致しない場合、この警告が表示されます。

この問題を解決するには、関数を使用する前に関数を宣言する必要があります。通常、適切なヘッダーを含めることでこれを行います。 -fno-builtin-* を使用しないことをお勧めします 可能な場合はフラグを立ててください。

stdlib.h の代わりに 、試してみてください:

#include <string.h>

そこが strcpy です と strncpy 少なくとも strcpy に従って定義されています (2) man ページ。

exit 関数は stdlib.h で定義されています 、しかし、そこで何が起こっているのかわかりません。


一部のプログラムの場合、これらのエラーは正常であり、修正する必要はありません。

プログラム phrap をコンパイルするときに、これらのエラー メッセージが表示されます (たとえば)。このプログラムには、いくつかの組み込み関数を変更または置換するコードが含まれています。警告を修正するために適切なヘッダー ファイルを含めると、代わりに GCC が一連のエラーを生成します。したがって、警告を修正すると、ビルドが効果的に中断されます。

正常にコンパイルされるディストリビューションの一部としてソースを取得した場合、エラーは正常である可能性があります。ドキュメントを参照して確認してください。


上記のエラーを生成する C コードは次のとおりです:

int main(int argc, char **argv) {
  exit(1);
}

gcc を使用して Fedora 17 Linux 64 ビットで次のようにコンパイル:

[email protected] ~/foo2 $ gcc -o n n2.c                                                               
n2.c: In function ‘main’:
n2.c:2:3: warning: incompatible implicit declaration of built-in 
function ‘exit’ [enabled by default]
[email protected] ~/foo2 $ ./n 
[email protected] ~/foo2 $ 

警告を消すには、次の宣言をファイルの先頭に追加します:

#include <stdlib.h>