可能性のある複製:
#pragma-理解を助ける
私はpragma
を何度も見ましたが、常に混乱していて、誰もがそれを知っていますか?それはWindowsだけですか?
CおよびC++プログラミング言語では、#pragma onceは非標準ですが、広くサポートされているプリプロセッサディレクティブであり、現在のソースファイルを1回のコンパイルで1回だけ含めるように設計されています。したがって、#pragmaはかつて#includeガードと同じ目的を果たしますが、コードの削減、名前の衝突の回避、コンパイル速度の向上など、いくつかの利点があります。
詳細は Wikipedia の記事を参照してください。
次のプリプロセッサコードを置き換えるために使用されます。
#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif
レガシーコンパイラをサポートするために両方を追加することをお勧めします(これはまれです)。
#pragma once
#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif
したがって、#pragmaが一度失敗した場合でも、古い方法は機能します。
一般的に、#pragma
ディレクティブは、コンパイラ固有のプリプロセッサ命令を実装するためのものです。それらは標準化されていないので、あまり頼りにしないでください。
この場合、 #pragma once
の目的は、ヘッダーファイルで使用するインクルードガードを置き換えて、複数のインクルードを回避することです。それをサポートするコンパイラで少し速く動作するので、#include
'ed頻繁に。
プラグマは、プリプロセッサーへのディレクティブです。これは通常、コンパイル中に追加の制御を提供するために使用されます。たとえば、同じヘッダーファイルのコードを含めないでください。多くの異なるディレクティブがあります。答えは、プラグマワードに続くものに依存します。