2016-04-25 15 views
1

プロジェクトを分割する必要があります。クラスの間に書いた関数を含む.cファイルを作成するように求められました。また、プロトタイプ用の.hファイルを作成するように求められました。外部の.hと.cファイルをまとめてコンパイルする

私はそれをすべて行い、それは自分のコンピュータで正常に動作します。しかし、.exeファイルと.hプロトタイプと.c関数ファイルをmain.cファイルとともに送信し、先生がコードをコンパイルしないと言って戻しました。 main.cのの

内容:functions.cの

... 
#include "functions.c" 
#include "function_header.h" 
... 

内容:function_header.hの

int getline(char s[], int lim) 
{ 
    int c,i; 
    for(i = 0; i < lim && (c = getchar()) != '\n' && c!=EOF; i++) 
    s[i] = c; 
    s[i] = '\0'; // tömb lezárasa 
    while(c != '\n' && c!=EOF) 
     c=getchar(); // puffer ürítése 
    return i; 
} 

内容:

int getline(char s[], int lim); 

は、私は少しもありません。彼のコードがコンパイルされない理由を手がかりにします。明らかに、新しいプロジェクトを開いてそのコードをmain.cにコピーすると、そのコードが別のフォルダに含まれているため、.cと.hのコードを使用できなくなります。では、何が問題になるのでしょうか?

+4

おそらく、メインの 'に' 'の#include「functions.c」必要はありません。 c。 –

+1

なぜいくつかの* [コンパイル単位](https://en.wikipedia.org/wiki/Compilation_unit)ができません。 [GNU make](https://www.gnu.org/software/make/)を使ってプログラムをビルドすることで、いくつかのオブジェクトファイルをリンクできますか? '.c'ファイルの' #include 'は悪い味であることに注意してください。 –

+0

しかし、.cインクルードを取り出すと、コンパイルされません。 .hを.hに含める必要がありますか? –

答えて

2

コメントには、.cソースファイルを他のソースファイルに含めないでください。それは.cと、対応する.hファイルに名前を付けるのと同じ方法(例えばfunctions.cfunctions.h

このようにそれを行うには良い考えです:

のmain.c:

... 
#include "functions.h" 
... 

functions.c:

#include "functions.h" 
... 

functions.h:

int getline(char s[], int lim); 

次に、コンパイルします(例:

gcc main.c functions.c 

そして、それはヘッダファイルで動作するようになると言及し、他のものがある:gcc)でInclude guards

+0

しかし、私がこれを行うと、私はエラーになります。 #include "functions.c"をfunctions.hに書き出すと問題ありませんが、それが正しいかどうかはわかりません。 –

+0

どのようなエラーが表示されますか?これが正しい方法です。エラーが発生した場合はそのエラーを解決し、別の方法でやり直してください。 –

+0

エラーLNK2019:関数_mainで参照されている未解決の外部シンボル_getline および LNK1120:解決されていない1個の外部 –

関連する問題