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

現在自作ライブラ(staticLibrary)を制作しているのですが、
stdafx.h,targetver.hを消して、include.hと言うh内にstdafx.h,targetver.hの処理を入れました。
include.hの中には自分が作ったhを入れて、cpp側でinclude.hを読んで処理をしている感じにしています。
こうしている理由としては、include.hを呼べば他のhを使えるようにしたかったからです。

質問1
ここからが本題なのですが、stdafx.hは必ず最初に読まないと行けない?ルールみたいなのがあって処理をinclude.hに移したら、include.hを最初に呼ばなくては行けなくなりました。
(※呼ばない場合,EOFがなんちゃら見たいなエラーになります。)
それを回避するために、プロパティ設定で「必ず使用されるインクルードファイル」に設定して回避したのですが、この処理自体大丈夫なのでしょうか?(エラー,ワーニングが出てないので怖くて)

質問2
include.hの中に#inlucde <vector>など入れているのですが、include.hで宣言したh自体は#pragma onceだけしか宣言していないのにstd::vectorが使えるのが謎です大丈夫でしょうか?

質問3
今まで話してたinclude.hを「プリコンパイル済みヘッダー」にしているのですが大丈夫でしょうか?

分かる方がいらっしゃいましたら助言いただけると嬉しいです。

A 回答 (1件)

普通は stdafx.h はプリコンパイルヘッダーに使われるヘッダー名ですね。


これはそのまま、プリコンパイルヘッダーとして使った方がトラブルが少なくてすむと思います。自力でトラブルを解決できて、自力で設定の変更が出来るのなら何も言うことはないのですが、そうでなければデフォルトの使い方をした方が無難です。

stdafx.h は単独で使用して、他のヘッダーでインクルードしたりしない方がいいです。
また、プリコンパイルするヘッダーは stdafx.h にまとめた方がいいですね。stdafx.h に含めるヘッダーは C/C++ の標準ヘッダー、Windows SDK の標準ヘッダーに留めるべきだと思います。外部ライブラリーを使用していて、ほとんど変更がないのなら、それらも入れてもいいとは思います。
自分で作成したヘッダーなどはほとんど変更がないのならいいのですが、頻繁に修正があると、プリコンパイルして全体のビルド時間を削減する意味がなくなってしまいます。

ヘッダーをひとまとめにしてインクルードする方法はたまに見かけますが、私はあまりやりません。そうすると、1つヘッダーを直しただけですべてのソースをコンパイルすることにもなりかねませんので、ソースを分割する意味が半減してしまいます。
    • good
    • 1
この回答へのお礼

なるほど、ありがとうございます
stdafx.hを復活させて標準ヘッダーやDirect関係もそこに入れて使うようにします。
こう言う知識を持った人が身近にいないので本当に助かります!!!

お礼日時:2019/03/08 14:09

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