web-dev-qa-db-ja.com

#pragmaはかつてCでどういう意味ですか?

可能性のある複製:
#pragma-理解を助ける

私はpragmaを何度も見ましたが、常に混乱していて、誰もがそれを知っていますか?それはWindowsだけですか?

19
wireshark

CおよびC++プログラミング言語では、#pragma onceは非標準ですが、広くサポートされているプリプロセッサディレクティブであり、現在のソースファイルを1回のコンパイルで1回だけ含めるように設計されています。したがって、#pragmaはかつて#includeガードと同じ目的を果たしますが、コードの削減、名前の衝突の回避、コンパイル速度の向上など、いくつかの利点があります。

詳細は Wikipedia の記事を参照してください。

26
helpermethod

次のプリプロセッサコードを置き換えるために使用されます。

#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif

レガシーコンパイラをサポートするために両方を追加することをお勧めします(これはまれです)。

#pragma once
#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif

したがって、#pragmaが一度失敗した場合でも、古い方法は機能します。

15
Alex Kremer

一般的に、#pragmaディレクティブは、コンパイラ固有のプリプロセッサ命令を実装するためのものです。それらは標準化されていないので、あまり頼りにしないでください。

この場合、 #pragma onceの目的は、ヘッダーファイルで使用するインクルードガードを置き換えて、複数のインクルードを回避することです。それをサポートするコンパイラで少し速く動作するので、#include 'ed頻繁に。

3
user500944

プラグマは、プリプロセッサーへのディレクティブです。これは通常、コンパイル中に追加の制御を提供するために使用されます。たとえば、同じヘッダーファイルのコードを含めないでください。多くの異なるディレクティブがあります。答えは、プラグマワードに続くものに依存します。

0
danny_23