C++ では、インクルードガードの機能がなぜコンパイラに実装されないのか
Q&A
Closed
インクルードガードの機能がなぜコンパイラに実装されないのか
最近、業務の都合で C++ を使うようになりました。
普段は Python を使っています。
手始めにコーディング規約から整理していましたが、ふと疑問に思うことがありました。
Google C++ スタイルガイド-インクルードガード では、以下のように記載されています。
すべてのヘッダーファイルは、インクルードガード(#define guards)を持たなくてはなりません。
その際のシンボル名は_H_の形でなくてはなりません。
ユニーク性を保証するため、プロジェクト内ソースツリーのフルパスに基づくものにします。 たとえば、プロジェクトfooに含まれるファイルfoo/src/bar/baz.hのガードは次のようにします。#ifndef FOO_BAR_BAZ_H_ #define FOO_BAR_BAZ_H_ ... #endif // FOO_BAR_BAZ_H_
ヘッダファイルの循環参照を避けるための記法だということは理解しています。
一方で、例えば、Python であれば、同じモジュールを何度 import してもエラーにはなりません。
ではなぜ、このインクルードガードの機能が C++ のコンパイラには実装されないのでしょうか。
これが実装されることによって生じる問題があるためかと思いますが、初学者には考え付きませんでした。
もし、C++ 言語開発段階でのこの提案に対するリジェクトがあればその理由も知りたいです。
以上です。
ご回答よろしくお願いします。