1. ホーム
  2. c++

[解決済み] なぜ、#pragma onceは自動的に仮定されないのですか?

2023-07-24 07:59:59

質問

一度だけファイルをインクルードするようにコンパイラに特別に指示する意味は何でしょうか?デフォルトでは意味がないのでしょうか?1 つのファイルを複数回インクルードする理由はあるのでしょうか?なぜそれを仮定しないのでしょうか?それは特定のハードウェアに関係しているのでしょうか?

どのように解決するのですか?

ここには、複数の関連する質問があります。

  • なぜ #pragma once が自動的に適用されないのですか?

    なぜなら、ファイルを複数回インクルードしたい状況があるからです。

  • なぜ、あるファイルを複数回インクルードしたいのでしょうか?

    いくつかの理由は他の回答で与えられています(Boost.Preprocessor、X-Macros、データファイルのインクルード)。私は"コードの重複を避ける"の特定の例を追加したいと思います。 OpenFOAM は、以下のようなスタイルを推奨しています。 #include というスタイルを推奨しています。例えば この の議論を参照してください。

  • OKですが、なぜオプトアウトでデフォルトでないのでしょうか?

    実際に規格で指定されていないからです。 #pragma は定義上、実装に特化した拡張機能です。

  • なぜ #pragma once はまだ標準的な機能になっていないのでしょうか?

    プラットフォームに依存しない方法で何が "同じファイル" であるかを突き止めることは、実際には驚くほど難しいからです。 詳細については、この回答を参照してください。 .