[解決済み] #pragma once vs include guards? 重複
2022-03-23 14:51:07
質問
私は、Windowsでのみ動作し、Visual Studioでコンパイルされることが知られているコードベースに取り組んでいます(それはExcelと密接に統合されているので、どこにも行くことはありません)。伝統的なインクルードガードを使うべきか、それとも
#pragma once
をコードに追加しました。私は、コンパイラに
#pragma once
の方がコンパイルが速くなり、コピー&ペーストの際のエラーも少なくなります。また、以下のような不格好さも若干軽減されます。
;)
注:コンパイル時間を短縮するために インクルードガードの冗長化 しかし、これはインクルードファイルとインクルードファイルの間の緊密な結合を追加するものです。通常、ガードはファイル名に基づいており、インクルード名を変更する必要がある場合にのみ変更されるため、それは大丈夫です。
解決方法は?
コンパイル時間に大きな差は出ないと思いますが
#pragma once
はコンパイラ間で非常によくサポートされていますが、実際には標準の一部ではありません。 プリプロセッサは、あなたの正確な意図を理解するのがより簡単なので、これを使えば少し速くなるかもしれません。
#pragma once
はミスをしにくく、入力するコードも少なくて済みます。
コンパイル時間を短縮するには、できる限り .h ファイルにインクルードする代わりに、forward declare してください。
私は
#pragma once
.
こちらをご覧ください の両方が使用可能であることを示すwikipediaの記事。 .
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】#pragmaはかつて安全なインクルードガードだった?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] C++のヘッダーファイルで#ifndefと#defineが使われているのはなぜですか?
-
[解決済み】#pragmaはかつて安全なインクルードガードだった?