web-dev-qa-db-ja.com

C-関数には内部リンケージがありますが、定義されていません

私はこのフォルダー構造を持っています:

structure

フォルダー構造をテストするための簡単な関数を作成しました。すべてのヘッダーファイルがあるかどうかを確認しますが、makeコマンドを使用してコンパイルすると、次のエラーが発生します。

警告:関数 'stampa'には内部リンケージがありますが、定義されていません

私はlagrange.hファイル私はこれを持っています:

#ifndef LAGRANGE_H

static void stampa(int i);

#endif /* LAGRANGE_H */

lagrange.cファイル私はこれを持っています:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include <stdio.h>

void stampa(int i){
    printf("%d", i);
}

最後に、int main.c単純に関数stampaを呼び出して、数値を渡します。

5
th3g3ntl3man

エラーの説明:

コンパイルエラーは次の理由で発生します。

  1. lagrange.h内でstaticキーワードを使用して(つまり、内部リンケージを使用して)関数を宣言しました
  2. そして、このファイルlagrange.hを、関数が定義されていないmain.cとは異なるlagrange.cファイルに含めました。

そのため、コンパイラがmain.cファイルをコンパイルすると、関連する定義のないstatic宣言が検出され、論理的にエラーが発生します。エラーメッセージは明示的です。

解決:

あなたの場合、解決策はstaticキーワードを削除することです。これは、staticは、関数が定義されている.cファイルでのみ呼び出すことができることを意味します。
さらに、static関数は、それが定義されている同じ.cファイルで宣言し、.hファイルでは宣言しないことをお勧めします。

12
Laurent H.