[解決済み] かつて#pragmaはC++11の標準に含まれていたのか?
質問
従来、C++で複数のヘッダをインクルードすることを避けるための標準的で移植性の高い方法は、(1).
#ifndef - #define - #endif
と呼ばれるプリコンパイラディレクティブスキーム。
マクロガード方式
(下記のコードスニペットを参照)。
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
しかし、ほとんどの実装やコンパイラでは(下の図を参照)、マクロガード方式と同じ目的を果たす、より "elegant" な代替案があります。
#pragma once
.
#pragma once
は、マクロガード方式と比較して、コードが少なく、名前の衝突が避けられ、時にはコンパイル速度が向上するなど、いくつかの利点があります。
調べてみると
#pragma once
ディレクティブはほとんどすべての既知のコンパイラでサポートされていますが
#pragma once
ディレクティブは C++11 標準の一部であるかどうか。
質問です。
-
を明確にすることができます。
#pragma once
ディレクティブは C++11 標準の一部なのですか? - C++11標準に含まれていない場合、それ以降のリリース(C++14以降など)に含める予定はありますか?
-
また、どちらかのテクニックを使用した場合の利点/欠点について、誰かがさらに詳しく説明してくれるとうれしいです (つまり、マクロガードと
#pragma once
).
解決方法は?
#pragma once
は
ではない
を標準装備しています。 これは広く普及している(ただし
普遍的な)拡張機能であり、使用することができます。
- 移植性の懸念が限定的な場合、および
- は、すべてのインクルードファイルが常にローカルディスクにあることを確認することができます。
標準化が検討されましたが、却下されました。 は確実に実装できない。 (問題が発生するのは は、複数の異なるリモートマウントを通してファイルにアクセスすることができます)。
インクルードガードがないことを確認するのは、かなり簡単です。 の競合が発生します。 ライブラリの場合、それは 多くの異なる開発で使用される場合、明らかな解決策は インクルードガードにランダムな文字を大量に生成することで を作成するときです。 (良いエディタであれば、この作業を行うように設定することができます。 新しいヘッダーを開くときはいつもそうです)。 しかし、そうでなくとも というような問題にはまだ遭遇していません。 のライブラリがあります。
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み】#pragmaはかつて安全なインクルードガードだった?
-
[解決済み】クラスコードをヘッダーファイルとcppファイルに分離する方法