53

abc.h を想定したヘッダー ファイルがあり、関数宣言は次のとおりです。

static int function1();

このヘッダー ファイルを abc.c にインクルードし、関数を定義して使用しました。

static int function1()
{
 < function definition>
}

コンパイル後、警告が表示されます:

warning: function1 declared static but never defined

静的を削除せずに警告を削除するにはどうすればよいですか。ありがとう。

4

2 に答える 2

52

静的関数はヘッダー ファイルで宣言できますが、これにより、ヘッダー ファイルをインクルードする各ソース ファイルに、関数の独自のプライベート コピーが作成されます。これは、おそらく意図したものではありません。

abc.hファイルを他の .c ファイルに含めていませんか?

関数を静的として宣言するには、関数が含まれるすべての.c ファイルで関数を定義する必要があるためです。

于 2013-03-28T12:32:56.087 に答える
16

グッド プラクティス: 静的関数は、それらが定義されているソース ファイルで宣言します (プロトタイプも提供してください)。

このようにして、関数はそのファイルにのみ表示され、そのような可視性の問題により、コードの競合の可能性を減らすことができます! したがって、プロトタイプと静的関数の定義を .c ファイルに指定するだけです。ヘッダー ファイルに static 関数を含めないでください。.h ファイルは外部で使用するためのものです。

複製: C の静的関数

于 2016-12-09T22:08:04.743 に答える