2017-11-23 16 views
2

コンパイラがヘッダーファイルを開かずにヘッダを見ることができるので、ヘッダーの最初の行は常に#includeガードにする必要があります(リンクはもう見つけられません)。したがって、ヘッダーファイルが既に含まれている場合は、ファイルを再び閉じるためにファイルが開かれず、ビルド処理が高速化されます。
しかし、私はいつもすべてのファイルの先頭にコメントブロックを持っています。だから私の質問は、#ブロックがコメントブロックの前に書かれなければならないということですか?コメントブロックの前後にガードが含まれていますか?

が良く、このスタイルです:

/////////////////////// 
// Name:  code.h 
// Author:  Me 
// Date:  dd.mm.yyyy 
// Description: This code executes a specific task 
/////////////////////// 

#ifndef CODE_H_ 
#define CODE_H_ 

... 

#endif 

またはこのスタイルISTよりよい:

#ifndef CODE_H_ 
#define CODE_H_ 

/////////////////////// 
// Name:  code.h 
// Author:  Me 
// Date:  dd.mm.yyyy 
// Description: This code executes a specific task 
/////////////////////// 

... 

#endif 

それとも全く問題ではありませんか?私の経験から

+0

実際に安全なナノ秒を望むなら、最初の可能な場所に書き込む必要があります。 ;)そのようなことは、すべてのソフトウェアの人生にとって本当に重要です。それがあなたが持っている最も重要な問題の1つであれば、あなたは非常に良い立場にあります! BTW:コンパイラはファイルをとにかく開く必要があります...インクルードガードは他の場所には表示されません。 – Klaus

+0

@Klaus私はこれが本当に大きなことではないことを知っていますが、私はただ好奇心を持っています。 :) –

+0

の前に。プリプロセッサが処理しなければならない線が少ないほど良い。私はコンパイラ(Watcom)を使って直接的な行数を表示していましたが、それは常に1:100以上の比率でした。 – EJP

答えて

4

others'

は、それは時間がかかり、ファイルの構文解析と読んでいないのですが、様々な最適化とコード生成がそうするファイルを開く

を渡すことです大規模なプロジェクトのビルド時間は無視してください。

これは、でないことを意味します。ボトルネックです。手順の

あなたが選んだどちらかのスタイルを選んでください。それは本当に意見に基づいています。


もう一つの興味深いコメントがhereが見つかりました:

ワンタイム時に、ファイルに含まガードをチェックするたびに開くのに十分な愚かな1つのまたは2つのコンパイラがあったかもしれません。このミレニアムで作成されたコンパイラは、ファイルのテーブルを保持し、ファイルを開く前にガードを含めて調べるだけで済むので、これを行うことはできません。

続きを読むFile-wide include-guards

+0

質問は、ガードを含むかどうかを使用することではなく、コメントブロックの前後に質問します。したがって、最適化とコード生成パスはここでは関係ありません。 – Klaus

+1

@Klausはい、私の指摘は、ファイルの解析と読み込みが実際にはOPを心配しないほど速く完了したことを示すことです。私の質問をどのように編集することを提案しますか?また、私の答えは警備員の使用や無用に答えるつもりはない。私はOPの質問に答えます。 =) – gsamaras

関連する問題