1. ホーム
  2. c

[解決済み] 警告: 組み込み関数 'xyz' の非互換な暗黙の宣言

2022-01-28 21:03:08

質問

いくつかのバイナリーをコンパイルする際に、このような警告がいくつも表示されます。

warning: incompatible implicit declaration of built-in function ‘strcpy’
warning: incompatible implicit declaration of built-in function ‘strlen’
warning: incompatible implicit declaration of built-in function ‘exit’

これを解決するために、私は

#include <stdlib.h>

をこの警告に関連する C ファイルの先頭に追加し、さらに以下のフラグでコンパイルします。

CFLAGS = -fno-builtin-exit -fno-builtin-strcat -fno-builtin-strncat -fno-builtin-strcpy -fno-builtin-strlen -fno-builtin-calloc

GCC 4.1.2を使っています。

$ gcc --version
gcc (GCC) 4.1.2 20080704

これらの警告を解決するには、どうしたらよいですか?

どのように解決するのですか?

C言語では、事前に宣言されていない関数を使用すると、その関数を暗黙のうちに宣言したことになります。暗黙の宣言では、戻り値の型は int 私の記憶が正しければ さて、GCCにはいくつかの標準的な関数について組み込みの定義があります。 暗黙の宣言が組み込みの定義と一致しない場合、この警告が出ます。

この問題を解決するには、関数を使用する前に宣言する必要があります。通常、適切なヘッダーを含めることによってこれを行います。私は -fno-builtin-* フラグを使用します。

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

#include <string.h>

そこで strcpystrncpy が定義されており、少なくとも strcpy (2) の man ページを参照してください。

は、その exit 関数が定義されています。 stdlib.h とはいえ、そこで何が起こっているのかはわからない。