私はこのフォルダー構造を持っています:
フォルダー構造をテストするための簡単な関数を作成しました。すべてのヘッダーファイルがあるかどうかを確認しますが、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
を呼び出して、数値を渡します。
コンパイルエラーは次の理由で発生します。
lagrange.h
内でstatic
キーワードを使用して(つまり、内部リンケージを使用して)関数を宣言しましたlagrange.h
を、関数が定義されていないmain.c
とは異なるlagrange.c
ファイルに含めました。そのため、コンパイラがmain.c
ファイルをコンパイルすると、関連する定義のないstatic
宣言が検出され、論理的にエラーが発生します。エラーメッセージは明示的です。
あなたの場合、解決策はstatic
キーワードを削除することです。これは、static
は、関数が定義されている.cファイルでのみ呼び出すことができることを意味します。
さらに、static
関数は、それが定義されている同じ.cファイルで宣言し、.hファイルでは宣言しないことをお勧めします。