web-dev-qa-db-ja.com

静的に宣言されたが定義されていない関数

私はヘッダーファイルを持っています、abc.hを想定しています

static int function1();

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

static int function1()
{
 < function definition>
}

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

warning: function1 declared static but never defined

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

35
pankanaj

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

abc.hファイルを他の.cファイルに含めていないのですか?

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

35
hazzelnuttie

良い習慣:定義されているソースファイルで静的関数を宣言します(プロトタイプも提供してください)。

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

複製: Cの静的関数

6
Ehsan