2017-01-15 4 views
1

.cppファイルがメインソースファイルにあらかじめロードするのではなく、アプリケーションに必要なヘッダーをすべてロードした場合、大きなプログラムで最適化できますか?cppはすべてのヘッダーをcppファイルに入れることができます

代わり MAIN.CPP

#include <header.h> 
#include <header1.h> 
#include <header2.h> 
#include <header3.h> 
//main code 

を有していると私はこれを実行し、ちょうどmain.cppにして.cppファイルをロードする.cppファイルを持つことができ、気に入りましたか?この

Loader.cpp

#include <header.h> 
#include <header1.h> 
#include <header2.h> 
#include <header3.h> 

MAIN.CPP

#include "Loader.cpp" 
//main code 
+5

これはコンパイル時の問題です。C++には "ヘッダローディング"はありません。 – LogicStuff

+3

このような "スーパーヘッダー"(時々呼ばれる)はプログラマの怠惰の症状です。はい、時にはコンパイラがそのようなことを速くするアプローチを実装していますが、すべてのコンパイラではそうではありません。増分ビルドを行うにも相当なハードウェアが必要だと主張した開発者を覚えています。彼がそのようなスーパーヘッダーを使用していたことが監査によって判明しました。スーパーヘッダーを削除し、影響を受けたコンパイルユニットを編集して(必要に応じて)必要なヘッダーのみを含めると、約85分の完全な再構築時間が短縮されました。 – Peter

答えて

6

のように前処理は、単純にコンパイルされるテキストを生成します。あなたの提案はソースコードと同じ本体につながるので、最適化には影響しません。

すべてのヘッダーを含めると、常に「スーパーヘッダー」と呼ばれるため、コンパイルが遅くなる可能性があります。

ただし、のプリコンパイル済みヘッダーは、このようなスーパーヘッダーをすばやく使用できるようにする一般的なソリューションです。コンパイルされたヘッダー機能については、IDEまたはコンパイラーのドキュメントを参照してください。

いずれの場合でも、通常、スーパーヘッダーの名前は.hです。何も実装していないため、.cppという名前は適切ではないでしょう。

0

可能ですが、再検討したいことがあります。

Loader.cppをソースファイルであるかのように指定したので、誤ってLoader.cppをコンパイルしようとすると、問題が発生することがあります。ヘッダーとして使用しているので、複数のヘッダーを連結しているので、コンベンションに従って名前を付け、.hファイル名の拡張子を使用すると意味があります。

その意味の最適化は無関係であるにおけるので、それは、コンパイルされたプログラム上のゼロ効果を持っているでしょう

に最適化されることになります。

しかし、これはコンパイル速度に問題があります。これらの問題は「最適化可能」ではありません。すべてのヘッダーをソースファイルにコピーする(必要かどうか)は、ソースファイルをコンパイルするのに必要な時間を遅くします(速度低下はハードドライブの速度に制限されます)。もっと大きな問題は、ヘッダーファイルを変更すると、内容が変更されるため、ソースファイルを強制的に再コンパイルするため、インクリメンタルビルドができなくなることです。

これらの問題は、この「テクニック」をすべてのソースファイルで使用することを想定して、複数のソースファイルに合成されます。ヘッダーが変更されたときにプロジェクト全体を再コンパイルしなければならないのは通常、小さなプロジェクトでは受け入れられません。

関連する問題