プロが教えるわが家の防犯対策術!

分割コンパイルを行っているのですが、うまくいかず、解決法も見出せないので、質問させてもらいます。

ファイル1

#include <stdio.h>
#include "ファイル2.c"

FILE *f1,*f2;

int main(void){

if((f1==fopen("file1.txt".....
.....
}
if((f2==........
.....
}

for(i=0;i<3;i++){
file2he();
}

fclose(f1);
fclose(f2);

fopen(stdout,"終了しました。");

return 0;
}

ファイル2
#include <stdio.h>

extern FILE *f1,*2;

void file2he(void){

...............

}

ってやって、コンパイルすると、code in header プリコンパイルヘッダーが作成できない。と警告がでてきます。
 ヘルプをみると、解決法みたいのが書かれているのですが、まったくわかりません。
まず、1.プリコンパイルヘッダーってなんですか?
   2.code in headerって?
   3.非インライン関数?
   4.どうすれば、この警告は消えるのでしょうか(プログラム的に正しくした     い?)

 リンクすると、ほとんど同じプログラムなのに、動く奴と、動かない奴があります。わかる範囲でいいです。教えてください。よろしくお願いします。

A 回答 (3件)

「プリコンパイルヘッダー」とは、コンパイルを高速化するために基本的に変更されないヘッダーファイルを予め途中までコンパイルした形にしたものです。


stdio.hなどシステムが提供するヘッダーファイルはプリコンパイルヘッダーとして指定しておくと少しコンパイルが早くなります。
今回の場合は、とりたててプリコンパイルヘッダーを指定する必要は無いと思いますので、コンパイラや統合ソフトの環境でプリコンパイルヘッダーを使用しない設定にした方がよいかもしれませんね。
    • good
    • 0
この回答へのお礼

 プリコンパイルヘッダーの意味はわかりました。
ありがとうございました。

お礼日時:2001/09/26 12:02

こんにちは。

itohhといいます。

>#include "ファイル2.c"
この意味は、ここに「ファイル2.c」展開しなさい。ということです。
分割コンパイルにはなっていません。
(この行は、削除してください。)

分割コンパイルとは、.cファイルを別々にコンパイルし、別々のobjファイルを作成することです。
そのあと、objファイルとlibファイルを結合して実行形式ファイル(exeファイルなど)
を作ることをリンクするといいます。(この処理までを含めて分割コンパイルということもあります。)
    • good
    • 0
この回答へのお礼

 もう少し勉強します。
ありがとう、ございました。

お礼日時:2001/09/26 10:51

1~4の前に・・・。



>if((f1==fopen("file1.txt".....

f2の方もそうですが、「==」ではなく「=」にしないとファイルポインターが保存されませんよ。(^_^;
不思議に思うかもしれませんが、ここは代入でよいのです。
if文等の条件式は真か偽かを判定します。
つまり0(偽)かそれ以外(真)かです。
ここではファイルをオープンした結果としてファイルポインターが代入されます。
そして代入された値(f1等)が最終的にこの式の結果として判定されます。
オープンに失敗すればNULL(値としては0)が入りますので偽として判定され、成功した場合0以外の値が入りますので真となるのです。

また、ご質問にある様なファイル分割したプログラムはincludeで読み込むよりも分割コンパイル、リンクにより作成すべきです。
ご使用の環境が判りませんが、お使いのコンパイラーでも出来るはずですのでまずは調べてみて下さい。
    • good
    • 0
この回答へのお礼

>「==」ではなく「=」
あっ、間違っていました。

>割コンパイル、リンクにより作成すべきです

ちょっと、調べてみます。
ありがとう、ございました。

お礼日時:2001/09/26 10:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!