ここ数日間、learncpp.com tuts をフォローしていて、Code::Blocks の .cpp ファイルから "#include "stdafx.h" をコメントアウトするように言われています。
インクルード行を削除するには、それは必須ですか? 何百ものファイルがあり、Win7 の Visual Studio から Linux の Code::Blocks に変更したり、Mac を使用している他の人に渡したりするとどうなりますか?
ここ数日間、learncpp.com tuts をフォローしていて、Code::Blocks の .cpp ファイルから "#include "stdafx.h" をコメントアウトするように言われています。
インクルード行を削除するには、それは必須ですか? 何百ものファイルがあり、Win7 の Visual Studio から Linux の Code::Blocks に変更したり、Mac を使用している他の人に渡したりするとどうなりますか?
stdafx.h
is the idiomatic name used for precompiled headers in the Visual Studio ecosystem. In a nutshell, it's a regular header, but the contents of this file will be compiled once and reused for all cpp files in the project.
That is useful since in most projects, a large number of headers (standard library, system header, shared project-wide definitions) are used by virtually all translation units (cpps), so using PCH is a huge performance benefit during compilation
(Actually, PCH is a hack to workaround C++' inefficient compilation and linkage model and it's a shame that we need to maintain it by hand … oups, blasphemy.)
But this also means that - as long as the contents of your stdafx.h
are gcc-compatible - compilation with CodeBlocks should still work, but without the immediate performance benefit.
The stdafx.h
generated by VS' app wizards doesn't work out of the box on other platforms - it typically includes Windows.h
. So to make it work, guard the Windows-specific definitions with appropriate #ifdef/#endif
pairs and vice versa for Linux or Mac-specific stuff.
いいえ、そのチュートリアルのアドバイスは意味がありません。stdafx.h
何も壊しません。Visual Studio コンパイラのプリコンパイル済みヘッダーのシステムは、意図的にそのように設計されています。
コンパイラがプリコンパイル済みヘッダーをサポートしている場合 (および Visual Studio と同じプリコンパイル アプローチに従っている場合)、stdafx.h
プリコンパイルに使用できます。
コンパイラがプリコンパイル済みヘッダーをサポートしていない場合 (または別のプリコンパイル アプローチを使用した場合)、stdafx.h
は通常のヘッダー ファイルとして解釈され、他のヘッダー ファイルと変わらず、他のヘッダー ファイルと同じ方法で処理されます。
そのチュートリアルが意味することは、stdafx.h
多くの場合、他のプラットフォームには存在しない Windows 固有のヘッダーが含まれている可能性があります。stdafx.h
それは可能ですが、それ自体にはまったく関係がありません。明らかに、他のプラットフォームでプログラムをコンパイルしている場合は、どのように実行しているかに関係なく、Windows ヘッダーを含めようとしないでくださいstdafx.h
。
私の知る限り、stdafx.h
(プリコンパイル済みヘッダー用の) Windows 専用ファイルです: コメントアウトしないと、コードはコンパイルに失敗します。
実際に行う唯一のことは、デフォルトのインクルード パス リストに stdafx.h (またはプリコンパイル済みヘッダー) を含むパスを含めることです。これが必要なのは、MS コンパイラが#include "stdafx.h"
ヘッダーを実際に検索せずにプリコンパイル済みデータに実際に置き換えるためです。
他のコンパイラは通常、データを取り込もうとします。ただし、コメントアウトしないでください。通常、コンパイラを調整して、プリコンパイル済みヘッダー機能を利用してコンパイルを強化することもできます。それはオプションでgcc
行われ-pch
ます。Code Blocks を使用すると、この wikiを見つけることができました。プリコンパイル済みヘッダーは悪ではありません。逆に、適切に理解して使用すれば、貴重な時間を節約できます。
実際にプリコンパイル済みヘッダー (PCH) を使用していない場合は、Visual Studio's Options/Preferences->Precompiled Header
それらを無効にすることをお勧めします。それらを削除しようとしても Visual Studio を使用すると、大量のエラーが発生します。