ホームページ >バックエンド開発 >C++ >C のグローバル変数によって引き起こされる複数の定義エラーを解決するにはどうすればよいですか?

C のグローバル変数によって引き起こされる複数の定義エラーを解決するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-04 07:09:11970ブラウズ

How Can I Resolve Multiple Definition Errors Caused by Global Variables in C  ?

複数の定義エラーの解決: C の変数スコープを理解する

C では、変数の複数の定義によりコンパイル エラーが発生する可能性があります。この問題を理解するために、指定されたシナリオを詳しく調べてみましょう。

提供されている 4 つのファイル (FileA.cpp、FileA.h、FileB.cpp、および FileB.h) について考えてみましょう。 FileB.h では、wat という名前のグローバル変数が int wat; として宣言されています。ただし、コンパイル中に、コンパイラは wat の複数の定義を検出します。

このエラーは、変数 wat が FileB.h と FileB.cpp の両方で定義されているために発生します。デフォルトでは、C はグローバル変数をグローバル スコープに配置し、すべてのコンパイル単位で共有します。同じ変数の定義が複数存在する場合、コンパイラはどの定義を使用するかを決定できません。

この問題を解決するには、前方宣言の概念を利用できます。この手法を使用すると、変数の定義を指定せずに変数の存在を宣言できます。この場合、FileB.h を次のように変更します。

extern int wat;

FileB.cpp で、通常どおり変数を定義します。

int wat = 0;

extern キーワードを使用して、コンパイラは、wat がプログラム内の別の場所に存在し、その定義が後で提供されることを通知します。これにより、wat の宣言と定義が 1 回だけ行われることが保証されます。

要約すると、変数が適切なスコープ設定メカニズムなしで複数回定義されると、複数の変数定義が発生します。前方宣言は、変数の定義を特定のソース ファイルに延期しながら、変数の存在を示すことで、この問題を解決するのに役立ちます。

以上がC のグローバル変数によって引き起こされる複数の定義エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。