1. ホーム
  2. c++

[解決済み] #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の記事。 .