OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

わかりにくい質問かもしれませんが。

  • 困ってます
  • 質問No.141109
  • 閲覧数67
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 79% (107/134)

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

ファイル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.どうすれば、この警告は消えるのでしょうか(プログラム的に正しくした     い?)

 リンクすると、ほとんど同じプログラムなのに、動く奴と、動かない奴があります。わかる範囲でいいです。教えてください。よろしくお願いします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル12

ベストアンサー率 40% (201/496)

「プリコンパイルヘッダー」とは、コンパイルを高速化するために基本的に変更されないヘッダーファイルを予め途中までコンパイルした形にしたものです。
stdio.hなどシステムが提供するヘッダーファイルはプリコンパイルヘッダーとして指定しておくと少しコンパイルが早くなります。
今回の場合は、とりたててプリコンパイルヘッダーを指定する必要は無いと思いますので、コンパイラや統合ソフトの環境でプリコンパイルヘッダーを使用しない設定にした方がよいかもしれませんね。
お礼コメント
Nickee

お礼率 79% (107/134)

 プリコンパイルヘッダーの意味はわかりました。
ありがとうございました。
投稿日時 - 2001-09-26 12:02:24
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 37% (419/1115)

1~4の前に・・・。 >if((f1==fopen("file1.txt"..... f2の方もそうですが、「==」ではなく「=」にしないとファイルポインターが保存されませんよ。(^_^; 不思議に思うかもしれませんが、ここは代入でよいのです。 if文等の条件式は真か偽かを判定します。 つまり0(偽)かそれ以外(真)かです。 ここではファイルをオープンした結果とし ...続きを読む
1~4の前に・・・。

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

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

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

お礼率 79% (107/134)

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

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

ちょっと、調べてみます。
ありがとう、ございました。
投稿日時 - 2001-09-26 10:44:52
  • 回答No.2
レベル12

ベストアンサー率 45% (210/459)

こんにちは。itohhといいます。 >#include "ファイル2.c" この意味は、ここに「ファイル2.c」展開しなさい。ということです。 分割コンパイルにはなっていません。 (この行は、削除してください。) 分割コンパイルとは、.cファイルを別々にコンパイルし、別々のobjファイルを作成することです。 そのあと、objファイルとlibファイルを結合して実行形式 ...続きを読む
こんにちは。itohhといいます。

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

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

お礼率 79% (107/134)

 もう少し勉強します。
ありがとう、ございました。
投稿日時 - 2001-09-26 10:51:11
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ