2013-03-28 10 views
24

を定義したことはありません:私はabc.cでこのヘッダファイルが含まれていると機能を定義して使用してい関数はstaticで宣言けどとして、私は、関数宣言を持つヘッダファイルと仮定するabc.hを、持っている

static int function1(); 

それ。静的削除せずに、

warning: function1 declared static but never defined 

がどのように私は警告を削除することができます

static int function1() 
{ 
< function definition> 
} 

コンパイルした後、私は警告を取得しています。おかげさまで

+0

ヘッダーからソースファイルにフォワード宣言を移動しますか? – simonc

+16

関数が 'static'の場合は、' inline'を除いてヘッダファイルに入れないでください... –

+0

@ H2CO3またはプライベートヘッダ – SomeWittyUsername

答えて

23

静的関数はヘッダーファイルで宣言することができますが、ヘッダーファイルを含む各ソースファイルには意図したものではない独自の関数のコピーが存在します。

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

関数をstaticとして宣言するため、関数はall .cファイルに定義されている必要があります。

+0

私は同じ問題を抱えていました。明らかなのは、ヘッダーファイルではなく、.cファイル内にのみ静的宣言を入れることです。ドゥー:D – AntonioCS

0

グッドプラクティス:。それは、彼らがに表示されているファイルだけなので、彼らは(も試作品を提供してください)で定義されているソースファイル内の静的関数を宣言し

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

重複:Static functions in C

関連する問題