web-dev-qa-db-ja.com

Cの外部.cファイルから関数を呼び出す方法は?

私のファイルは

// main.c  

#include "add.c"

int main(void) {
    int result = add(5,6);
    printf("%d\n", result);
}  

そして

// add.c  

int add(int a, int b) {
    return a + b;
}
37
ProtoTyPus

use #include "ClasseAusiliaria.c" [山括弧(<>)を使用しない]

および .h拡張子でファイルを保存することをお勧めします 同じディレクトリ/フォルダに保存します。

#include "ClasseAusiliaria.h"

27
Gaurav Jain

Main.cを次のように変更します

#include <stdlib.h>
#include <stdio.h>
#include "ClasseAusiliaria.h"

int main(void)
{
  int risultato;
  risultato = addizione(5,6);
  printf("%d\n",risultato);
}

ClasseAusiliaria.hを作成します

extern int addizione(int a, int b);

次に、コードをコンパイルして実行し、次の出力を得ました

11
9
Elliott Frisch

ヘッダーファイルでint add(int a, int b);(セミコロンに注意)を宣言し、ファイルを両方のファイルに含める必要があります。 Main.cに含めると、コンパイラーに関数の呼び出し方法が通知されます。 2番目のファイルに含めると、宣言が有効であることを確認できます(宣言と実装が一致しなかった場合、コンパイラは文句を言います)。

次に、両方の* .cファイルを1つのプロジェクトにコンパイルする必要があります。詳細はコンパイラに依存します。

5
Alexandr

ここには多くの素晴らしい貢献がありますが、それでも私に追加してみましょう。

最初に気づいたのは、add()という関数を作成することをメインファイルに約束しなかったことです。このカウントは、メインファイルで次のように行われています。

    int add(int a, int b); 

メイン関数の前に、その方法でメイン関数が追加関数を認識し、その実行可能コードを探します。だから本質的にあなたのファイルは

Main.c

    int add(int a, int b);

    int main(void) {
        int result = add(5,6);
        printf("%d\n", result);
    }  

および// add.c

    int add(int a, int b) {
        return a + b;
    }
4
Precious George

ファイルclassAusiliaria.hを作成し、そこにメソッドシグネチャを提供します。

.cファイルを含める代わりに、この.hファイルを含めます。

3
Kraken

.cファイルを含めることができます。論理的には問題ありませんが、標準に従って、関数の実装を隠し、バイナリを提供するために、ヘッダーとソースファイルのテクニックが使用されます。ソースファイルに実装がある場合。プロジェクトを外部に販売する場合は、ヘッダーとバイナリ(libsおよびdll)を出荷するだけで、関数実装の背後にメインロジックを隠します。

ここでの問題は、インクルードが発生するファイルと同じディレクトリ内にあるファイルをインクルードするため、<>の代​​わりに ""を使用する必要があることです。 .cファイルと.hファイルの両方に共通です

3
Varo
 write main.c like this - 
 caution : while linking both main.0 and ClasseAusiliaria.o should be 
 available to linker.

 #include <stdlib.h>
 #include <stdio.h>
 extern int addizione(int a, int b)

 int main(void)
 {
     int risultato;
     risultato = addizione(5,6);
     printf("%d\n",risultato);
 }
2
susheel pandey

他のcファイルにcファイルを含めないでください。代わりに、呼び出したい関数が宣言されているヘッダーファイルを作成します。そのように:ClasseAusiliaria.hファイル:

int addizione(int a, int b); // this tells the compiler that there is a function defined and the linker will sort the right adress to call out.

Main.cファイルに、新しく作成されたヘッダーファイルを含めることができます。

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

int main(void)
{
    int risultato;
    risultato = addizione(5,6);
    printf("%d\n",risultato);
}
2
UsYer