web-dev-qa-db-ja.com

extern(グローバル変数)は正当化できますか?

どのような状況で、外部変数(つまり、グローバル変数)を使用することが正当であると思いますか?

たとえば、一度に1つの状態が指定されているシステムで、この状態を外部に保存することは適切でしょうか?

4
Edward

次の場合、externグローバル変数が必要になることがあります。

  • プログラムの状態の要素(つまり、グローバル変数の内容)を共有する必要があり、かつ

  • これらの要素を静的クラスメンバーとして管理することはできません(優先的には、プライベートまたは保護されたもの)。

  • それをシングルトンにカプセル化するオーバーヘッドを許容することはできません。

  • グローバルを使用する代わりに、その状態を処理するオブジェクト/関数を互いに知り、直接通信する簡単な方法はありません。

  • この状態を必要とするクラス/関数を同じコンパイル単位に再グループ化することは望ましくありません(少なくとも、グローバル変数staticを作成し、表示を少なくすることで、予期しない副作用のリスクを減らすことができます)。

または、extern volatile同じ理由でグローバル変数ですが、それがシステム状態に関するものである場合(ハードウェアによって使用される固定位置など)

1
Christophe