質問
他のおすすめの実践のための清掃"ヘッダにスパゲッティ"がどのように極めて 遅く編集回(Linux/Unix)?
はありまequvalentを"#pragma回"GCC?
(見相反するメッセージに関すること)
感謝。
解決
とでおなじみの"のガード"(#ifdefで当初のヘッダ..は、追加料金の迅速化を構築時間を含むガードです。でした"大規模C++ソフトウェア設計".そのシェイプのクラシックなどの警備員とは異なり、#pragmaばな作品のプリプロセッサの構文解析に必要な存のヘッダから2時間(それはまだ構文解析の開始と終了は含ます。外部などを守りますので、使用できません#ifdefの周辺の#includeラインそのものです。
このようになります。
#ifndef MY_HEADER
#include "myheader.h"
#endif
もちろんのHファイルのクラシックなどのガード
#ifndef MY_HEADER
#define MY_HEADER
// content of header
#endif
このトピ.hファイルなも開/解析によるプリプロセッサで、多くの時間を大型プロジェクトがヘッダファイルに座共通の遠隔地とすることもあります。
また、すべてのその。hth
他のヒント
だいたい一斉清掃の時間でその最適解はすべて削除するときは、#を含むすべてのファイルを除くとも例abc.h abc.cppしてコンパイルします。追加の必要な前進宣言またはヘッダの最初のエラーを繰り返しまcompleを削除する
これは当てはまりませんの修正の背景にある根本的な問題きなど、さまざまな課題になるのみが含まれているのに必要となる。
このままGCCと考えて #pragma once
推奨されていませんが、でも #pragma once
使って考えなければならないのでいく速度が上昇するでしょう.
みuntangleの #include
スパゲッティをできる見 doxygen.できることをグラフに含まれるヘッダ、お端に簡素化物です。できないリコールの詳細offhandが、グラフ機能することを要件とする場合があり置 GraphViz いdoxygenのパスができGraphVizのdotty.exe.
もう一つのアプローチあると考えればコンパイル時には主要な関心事での設定 プリコンパイル済みヘッダー.
を拝読させていただきましたその他の日程もフレキシビリティを低減のヘッダー依存関係:書ける
- すべての#include諸表
- 除去の一声でrecompiles
- 場の作成に失敗した場合、追加の計算書に
できれば終わるのに最低限の必要を含むコードで.き書類のスクリプトを再手配含まれる場合も自立することとなった場合その他のヘッダに含まれる前にそのヘッダの最初にはしばらく時間がかかる場合作成に失敗した場合、報告します。る部分もあろうグループのコード.
あ注
- 現代のコンパイラ(gccの中を認識しヘッダーガードの最適化と同じようにpragmaまうみファイルのオープンします。
pragma一度に問題がある場合、同じファイルが異なる名前のファイルシステム(ソフト-リンク)
- gccを支え#pragmaまでと同じものを見ることができない"陳腐化"
pragma度などによってコンパイラ、の一部ではありませんC標準規格
- なコンパイラでコンパイル問題を含んでいます。リーディングプロジェクトIncredibuildにも問題#pragma一
リチャードにやや右の"なぜ彼を解決したのか).
とにかく、すべてのC/C++ヘッダに使用すべき内部などのガードです。
この事実が示しているのは、いずれかの
1-お遺産コードによって維持され、もはやを使用したヘッダ(あるhackもこんにちは...おに必要なのはスピードを作成、refactorとピアツェンツァのドゥオーモコ)
2-ご遺産コードがいます。その後、のいずれかをご利用プリコンパイル済みヘッダーおよび/または警備員外の警備員の一時解が、最終的に、削除する必要が全て含まれます。Cいます。CPP、コンパイルす。Cいます。CPPファイルの一時は、正などを含むの実現を支援するた宣言は含まれ必要な場合にはもと大型などのより小さいものをいいます。Cいます。CPPファイルのみを取得し、ヘッダーが必要で).とにかく、試験および撤廃を含むの整備、プロジェクトなので---
自分の体験プリコンパイル済みヘッダーませんでしたのちょうど良い時間が半分に短縮され、コンパイラが見出せない象徴であったかが定義されていた、ちょっと変わったフル"クリーン/再構築"して使用したことになったのは、コンパイル済みヘッダーが互換性のために残されています。なので私からはご利用いた外部の図書館-文書んでもタ(STL,C APIヘッダの向い).ただ、自分の経験したVisual C++6んね(ご希望?) んでます。
現在、最後にひとつ:ヘッダは、常に自己充足している。そのた場合には、含有のヘッダにより順に包摂しています。例えば、書き:
#include "AAA.hpp"
#include "BBB.hpp"
な:
#include "BBB.hpp"
#include "AAA.hpp"
でBBBに依存年次決算しましては、依存関係の必要はありませんで認められた。ないとの認識で定義のみを集計、悪夢です。BBBにはAAA、もともと幾分鈍化:最後は前向き宣言をまとにかくクリーンなが含まれてより速くコンパイルタイマー.
ご利用いただくのスピードアップのための時間
- 使用プリコンパイル済みヘッダー
- 使用キャッシュ機構(scons)
- 使用分散システムの構築(distcc、Incredibuild($))
にヘッダ:を含むヘッダのみが使えない場合は、前進宣言が常に#includeファイルする必要がありますの依存関係が悪!).
としてのその他の答えは、ぜのみを使宣言となりました。私の知る、GCCがないのに何でも相当の#pragmaば、旧来のファッションのスタイルなどのガードです。
の回答、その問題に関する既存のコードを含む厳しい"などのめ"など。の問題があるかどうかに他のツール/スクリプトを明確にいます。
ヘッダーガードarentを解決していっ防止のためのコンパイラからの読み込みファイル全体が再び再...
PC-Lint より良くグループのスパゲッティンターフェースの通称です。またその他の問題を解決のためのものようにuninitialised変数のう目に見えない。
としてonebyone.livejournal.com とで反応がない時には、一部のコンパイラを支援 インクルードガードの最適化, のページでリンクを定義して
のインクルードガード最適化できるコンパイラを認識し、内部インクルードガードム、上記ユー-エス-エスのリモート-センシングは、ファイルに複数の倍。のコンパイラで見るインクルードファイルにしてコメントと空白をした場合のファイルのファイル内に含ガードです。であれば、店舗のファイル名などのガード条件マップを作成する。次回のコンパイラは、ファイルなので、チェックすることができるなどのガード状態を作るかどうかの決定をスキップファイルまたは#includeでなく、ファイルです。
その一方で、すでに回答する外部などについてはガードマンがないの答えです。のためのdisentanglingヘッダファイルに記載されていることが要件となる特定の順序に、私はあなたが次の
- 各
.c
または.cpp
ファイル#include
に対応する.h
ファイルの最初にその#include
指令にはソートアルファベット順とする。まいのビルドエラーの場合この改unstated依存関係ヘッダファイルです。 - またヘッダファイルを定義するグローバルtypedefsのための基本的な種類はグローバル
#define
いるディレクティブとコード、.h
ファイル#include
そのファイルの最初にその#include
指令にはソートアルファベット順とする。 - これらの変化の原因をコンパイルエラー、まいを追加する明示的な依存関係からヘッダファイルを他の形式の
#include
. - これらの変化を起こさないコンパイルエラー、その原因に行動変化します。今だけるように、テストスーツを利用できる機能を確認するためのご使用をご検討ください。
また音のような問題の一部がその増分ビルドよりもずっと遅いですがなるべきます。この状況を改善することができ支援するた宣言または分散システムの構築、その他おいて指摘しなければなりません。