1. ホーム
  2. c++

[解決済み】#pragmaはかつて安全なインクルードガードだった?

2022-03-25 09:25:34

質問

を使用する場合、コンパイラの最適化があるとの記事を読みました。 #pragma once その結果、コンパイルが速くなる可能性があります。 これは非標準であるため、クロスプラットフォームの互換性の問題を引き起こす可能性があることは認識しています。

これは、Windows以外のプラットフォームの最新のコンパイラ(gcc)でサポートされているものなのでしょうか?

プラットフォームのコンパイルの問題を避けたいが、フォールバックガードの余分な作業も避けたい。

#pragma once
#ifndef HEADER_H
#define HEADER_H

...

#endif // HEADER_H

心配すべきなのか?このことにこれ以上精神的エネルギーを費やすべきでしょうか?

解決方法は?

使用方法 #pragma once は最近のどのコンパイラでも動作するはずですが、標準の #ifndef インクルードガードです。うまくいきますね。ひとつだけ注意点があるとすれば、GCCでは #pragma once 前に バージョン3.4 .

また、少なくともGCC上ではそうであることがわかりました。 を認識し、標準の #ifndef インクルードガードを最適化し と比べても、それほど遅くはならないはずです。 #pragma once .