11

#pragma hdrstopいくつかのソース (cpp) ファイルに (ファイル名パラメーターなしで) 入れることの実用的な価値 (「何をするか」) は何ですか?

MSDN ドキュメントは (もう一度) 泥のように明確であることに注意してください。

編集/注:この回答とリンク先の記事が推奨しているように見えるので、私はこれを求めています。しかし、コンパイル単位ごとに個別の pch ファイルを用意する利点がわかりません。

4

3 に答える 3

13

元の質問に対する答えは、/Yc も /Yu も設定されていないファイルに #pragma hdrstop を設定する目的は無視されるため、プリコンパイル済みヘッダーなしでビルドするビルド構成とビルドする他のビルド構成をセットアップできることです。 WITH プリコンパイル済みヘッダーであり、そのために含まれているコードやヘッダーを変更する必要はまったくありません。

もっと詳しく...

MSDN のメモには、「hdrstop プラグマを使用すると、コンパイル前のファイル名とコンパイル状態が保存される場所をさらに制御できます」と記載されています。それは本当ですが、それがどれほど役立つかは特に明らかではありません...

手短に。

  • /Yc または /Yu でコンパイルされていないソース ファイルに #pragma hdrstop を配置しても、まったく効果がありません。
  • ファイルに /Yu が設定されている場合、hdrstop はコンパイラに、hdrstop が表示される行の前のすべてを破棄し、代わりにプリコンパイル済みヘッダーを挿入するように指示します。
  • /Yc がファイルに設定されている場合、hdrstop は、hdrstop がプリコンパイル済みヘッダーとして表示される行までのすべてのコンパイル済み状態をすべて保存することを意味します。

秘訣は、オプションのヘッダー ファイル名なしで /Yc と /Yu を使用することです。'use' または 'create' ラジオ ボタンをチェックして、'through header' 編集ボックスを空白のままにします (またはプロジェクト ファイルを編集します...)。

したがって、おそらく PrecompiledHeader.cpp という名前のファイルが 1 つあります。このファイルには、プリコンパイル済みヘッダーにインクルードするヘッダーが含まれており、インクルード ファイルのリストの最後に #pragma hdrstop があります。この 1 つのファイルは、/Yc でコンパイルされます。

次に、プリコンパイル済みヘッダーにあるインクルード ファイルの後に #pragma hdrstop を使用して、他のすべての cpp ファイルを作成します。これらのファイルはすべて /Yu でコンパイルされます。

これにより、PrecompiledHeader.cpp が (この例では) 単一の pch ファイルと、その単一の pch ファイルを使用して他のすべてのファイルを構築します。

これを行う利点は、「グローバルな」プリコンパイル済みヘッダー ビルド ヘッダー ファイルをファイルに含める必要がないことです。つまり、stdafx.h などは必要ありません。これは、すべての #pragma hdrstop 行が単純に無視されるプリコンパイル済みヘッダーなしでビルドするビルド構成をセットアップできることを意味します。

これは、迅速に開発できる単一の「プリコンプなし」ビルド構成 (単一のヘッダーを変更して、世界を強制的に再構築することはできません) と、プリコンパイル済みを使用する他の「通常の」構成を持つことができることを意味するため、「良い」です。ヘッダー。

于 2013-07-04T12:44:14.713 に答える
5

以前のすべてのコード#pragma hdrstopは、プリコンパイル済みヘッダーの一部になります。filenameパラメータが指定されていない場合、ヘッダーの名前は、ドキュメントに記載されているように、拡張子が.PCHのソースファイルのベース名になります。

プリコンパイル済みヘッダーファイルの名前は、次の規則に従って優先順位に従って決定されます。

  1. /Fpコンパイラオプションの引数

  2. #pragmahdrstopへのfilename引数

  3. 拡張子が.PCHのソースファイルのベース名

したがって、という名前のファイルにそれがある場合は、IFFblah.cppという名前のファイルが生成されます(1つのファイルのみを設定する必要があります)。blah.pch/Yc

于 2011-09-02T11:45:06.200 に答える
4

C/C++ プロジェクトで使用#pragma hdrstopしない場合は、作成された .pch のソース ファイルとして専用の .cpp ファイルを用意してください。

#pragma hdrstop.pch ファイルを作成したい .cpp ファイルで使用する場合、.cpp ファイルは の行の後に他の有用なコンテンツを持つことができます#pragma hdrstop。最初にこの .cpp ファイルを /Yc コンパイル オプションでコンパイルすると、.pch ファイルと .obj ファイルが得られます。.cpp ファイルを変更して /Yu コンパイル オプションで再コンパイルすると、コンパイラは の行の前の内容#pragma hdrstopを .pch ファイルに置き換え、 の行の後の部分を再コンパイルして#pragma hdrstop、新しい .obj ファイルを作成し、コンパイル時間を節約します。プロジェクトのソース ファイルが 1 つだけであることは非常に便利です。

プリコンパイル ヘッド ファイルのみを使用するソース ファイルの場合#pragma hdrstop、.pch ファイルに置き換える必要があるコンパイラの目印となるため、/Yu コンパイル オプションでヘッダー ファイル名を指定する必要はありません。

于 2013-07-01T21:26:23.483 に答える