2

多くのグローバル変数を使用する古いコードを使用しています。私はグローバル変数を使用することの欠点の多くを十分に認識しているので、私の質問は、グローバル変数を使用すべきかどうかということではありません。

コードの大部分を見直した後、2 つのパターンに気付きました。どちらが悪いのか、その理由を判断しようとしています。

2 つのパターンの類似点は、グローバル変数が「extern」を使用して公開されることです。

2 つのパターンの主な違いは次のとおりです。

  1. 一部のグローバルはヘッダー ファイルで extern'ed/exposed され、#include を使用して多くのソース ファイルにインクルードされます。

  2. 他のグローバルは、ソース ファイル自体で直接 extern'ed/exposed されます。

これら2つのうち、どちらが他方よりも悪いと思いますか? なぜ?

それらを同じように悪いと思いますか?なぜ?

4

2 に答える 2

1

1) 隠せるものは隠す。それらを表示する必要がない場合は、(宣言を提供することによって) 人々がそれらを使用することを許可しないでください。

2) extern が必要ない場合は static を使用し、… できることは非表示にします。

これら2つのうち、どちらが他方よりも悪いと思いますか? なぜ?

最初; 他の翻訳から不必要に見えるからです。2 つ目はリンカー エラーを引き起こす可能性がありますが、別のソース/翻訳で正しく使用するには内部の知識が必要です。リンカーの問題は、それを作成することで解決できますstatic(再度、その宣言が 1 つの翻訳に表示される場合)。

それらを同じように悪いと思いますか?なぜ?

いいえ。グローバルの実装を非表示にしてアクセスを制限できれば、コードベースが有利になります。

于 2013-07-10T23:23:31.317 に答える
1

私は、C ヘッダー ファイルは、public、private、および protected の 3 つのカテゴリのいずれかに分類されると考える傾向があります (C++ キーワードまたは同じ名前と混同しないでください)。パブリックは、誰でもアクセスできることを意図したものです。Private は、モジュールの内部実装のみを目的としたすべてのもの (複数のファイルに分割されている場合) 用です。これらはモジュールの外では決して見えません。Protected は、通常は別のモジュールからアクセスされるとは想定されていないが、何らかの理由でアクセスする必要があるアイテム用です (ここでモジュール結合が発生する可能性があります)。

私にとって、ヘッダー ファイルの代わりに C ソース ファイルで extern されたシンボル (グローバル変数など) は、これらの「ルール」に違反しており、コードの匂いとして解釈されます。

お役に立てれば。

于 2013-07-11T00:38:39.300 に答える