2017-01-21 19 views
-1

私はこれらの3つのファイルを一緒にリンクしようとしています。教訓的な例ですが、私は3つのファイルをコンパイルするさまざまな組み合わせを試しましたが、何が間違っているのかわかりません。この簡単なコードのものが間違っていても。Cファイルをコンパイルする際の問題

私が理解しようとしているのは、メインファイルのヘッダーファイルからインクルードするために、関数の宣言を別のファイルに分ける方法です。少なくとも、これは私が考え出したものです。先生は.hファイルと2つの.cファイルを持っているために、例を設定します。ここでは、彼らは...

extern int foo(int); 

使用がfoo.h

foo.cの

int foo(int x){ 
return x==42 ? 1 : 0; 
} 

#include <stdio.h> 
#include "foo.h" 
int main(){ 
printf("foo(42) == %d \n", foo(42)); 
getchar(); 
return 0; 
} 

-foo.c私は誰かがこのを通じて私を導くことを願って、私は別のソリューションを必要としない、これら3で私を助けてくださいだけBECAをファイル先生の目的を使用してこれはだった。

+0

gcc -Wall use-foo.c foo.cをコンパイルしてa.outを取得し、./a.outで実行しますが、foo.hがgccを呼び出すカレントディレクトリにあることを確認してください。 –

+0

extern int foo(int)は必要ありません。 Cの関数は自動的にexternになります。int foo(int); –

+2

'gcc use-foo.c foo.c'または' gcc -c foo.c -o foo.o'そして 'gcc use-foo.c foo.o' – BLUEPIXY

答えて

0

あなたはコマンドでコンパイルすることができます

gcc -o use-foo use-foo.c foo.c 

その後、あなたはコマンドでそれを実行できるようになります:

./use-foo 

ちょうどすべてのファイルが同じであることを確認してくださいそのディレクトリからgccを呼び出し、gccがシステムにインストールされていることを確認します。夫婦のファイルを含むの詳細アドバイス、およびクロスコンパイル

:(foo.hというような) あなたのすべてのヘッダファイルを持っている必要がありますが、警備員などが追加から、コンパイラを防ぐだろうと

#ifndef __FOO__ 
#define __FOO__ 

int foo (int); 

#endif 

のようなあなたのコードでヘッダファイルを複数回使用する。

また、foo.cコードにfoo.hを含めることもできます。

+1

ヘッダーに関数/変数宣言のみが含まれている場合、インクルードガードは必要ありません。 – melpomene

関連する問題