15

アップデート:

ヘッダー ファイルに stdafx.h をインクルードすると、どのような影響がありますか?


Linux/Eclipse CDT で C++ プロジェクトを開始し、それを Visual C++/Windows にインポートしました。

Visual C++ では、コンパイルを高速化するためにプリコンパイル済みヘッダーの使用を開始し、stdafx.cpp と stdafx.h を定義しました。

ここに私のstdafx.hがあります

#pragma once

#include <string>
#include <vector>
#include <map>
...

そして私のstdafx.cpp

#include "stdafx.h"

すべての .h および .cpp ファイルには、次のものがあります。

#pragma once //if in a header file
#include "stdafx.h"

リリースとデバッグの両方で、「プリコンパイル済みヘッダーの作成 (/Yc)」があります。デバッグモードでは正常にコンパイルされましたが、リリースモードではレポートが継続されます

error LNK2005: ___@@_PchSym_@00@UfhvihUaszlaDUwlxfnvmghUnnlUhixUnnlPeDUnnlPeDUivovzhvUvmgrgbOlyq@ already defined in A.obj

両方を「プリコンパイル済みヘッダーを使用する」に切り替えると、デバッグとリリースの両方が表示されます

fatal error C1854: cannot overwrite information formed during creation of the precompiled header in object file:

誰が何が起こっているのか知っていますか?

4

4 に答える 4

30

stdafx.cpp に対してのみ「プリコンパイル済みヘッダーの作成」を入れます。次に、他のすべての「.cpp」ファイルに対して「プリコンパイル済みヘッダーを使用」します。最後に、include "stdafx.h"各「.cpp」ファイルの先頭にあります (通常はヘッダー ファイルにはありません。

于 2009-09-09T02:01:19.760 に答える
6

コンパイラ オプションは、/Ycコンパイル アクション用のプリコンパイル済みヘッダーを作成するために使用されます。この/Yuオプションは、コンパイル済みヘッダーを使用するようにコンパイラーに指示します。

/Yuプロジェクト設定では常にこのオプションを使用します。stdafx.cppファイルのプロパティ ページで、/Ycオプションが設定されます。

.cppファイルごとに個別のコンパイル オプションがあることを理解することが重要です。

/Y オプションの詳細については、こちらを参照してください。

于 2009-09-09T02:05:59.037 に答える
4

コンパイラにディレクティブを無視させていると思われる の#pragma once前にを置きます。#include "stdafx.h"#pragma once

#include "stdafx.h"また、ヘッダーファイルに行を入れる必要はまったくないと思います。

于 2009-09-09T01:54:10.500 に答える
1

「stdafx.h」を使用した結果は、PreCompiled Header システムの影響を受けません。Create PCH/Use PCH をオフにすると、コードはコンパイルされて同じ出力が作成されますが、処理が遅くなります。これが、移植可能なコードで使用できる理由でもあります ( とは異なります#pragma once) 。

于 2009-09-09T14:34:54.030 に答える