1. ホーム
  2. c++

[解決済み] ヘッダーファイルの変数宣言 - static か not か?

2023-02-28 02:58:49

質問

リファクタリングで一部の #defines のような宣言を C++ のヘッダーファイルで見かけました。

static const unsigned int VAL = 42;
const unsigned int ANOTHER_VAL = 37;

問題は、もしあるとすれば、静的なものがどのような違いをもたらすかということです。 ヘッダを複数含めることは、古典的な #ifndef HEADER #define HEADER #endif のようなトリックがあります(それが重要なら)。

静的は1つのコピーだけということでしょうか VAL のコピーは一つしか作成されないということでしょうか?

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

この static のコピーが1つ存在することを意味します。 VAL は、それがインクルードされる各ソースファイルに対して作成される1つのコピーであることを意味します。 しかし、これはまた、複数のインクルードが複数の VAL の定義が複数になり、リンク時に衝突することがないということです。 C言語では static がない場合、1つのソースファイルだけが VAL を定義し、他のソースファイルは extern . 通常は、ソースファイルの中でそれを定義し(おそらくイニシャライザ付き)、その上に extern の宣言をヘッダーファイルに記述します。

static グローバルレベルの変数は、インクルードを介してそこに到達したか、メインファイルにあったかにかかわらず、それ自身のソースファイルでのみ表示されます。


編集後記 C++では const オブジェクトは staticextern のキーワードは、暗黙のうちに、その宣言の中で static .