8

これはおそらくばかげた質問になるでしょうが、私はいくつかのコードを見直していますが、この男が何をしているのかわかりません。1 つの C ファイルで、彼は多くの型の多くの要素を持つグローバル構造を定義しました。したがって、関数「A」から関数「B」への呼び出しがあります。呼び出しでは、グローバル構造へのポインターを渡し、関数 "B" でいくつかの処理が行われ、グローバルの一部が更新されます。すでにグローバルであるため、これはすべて余分なやり過ぎのように思えます。構造体が関数「A」に対してローカルである場合、構造体へのアドレスが関数「B」に渡されていることが完全にわかります。ただし、メモリは C ファイルの一番上に既に永続的に割り当てられています。

したがって、これを行うための「優れたコーディングプラクティス」BKMまたはそのようなものがあると確信していますが、それを見ることができません。要するに、変数が既にグローバルであるのに、なぜアドレス ポインターを作成し、それを不必要に関数に渡すのでしょうか?

4

3 に答える 3

11

ポインターを渡すことは、主にグローバルが悪いスタイルであるため、良いスタイルです。おそらく、元の開発者は、グローバルがグローバルではない可能性、またはそれを受け入れる関数が別の変数で動作する可能性について考えています (グローバルである場合とそうでない場合がありますが、それでも識別する必要があります)。

于 2012-08-15T17:50:21.290 に答える
1

構造体インスタンスがグローバルで、2 つのコード ファイルがそれにアクセスできる場合、明らかに不要なコーディングです。しかし、以前の開発者が他のインスタンスを作成することを計画していた可能性があり、そのような場合、彼の関数の再利用性が問題になっていました。

関数の相互通信中に構造体への参照を使用することは良い習慣ですが、将来的に大きなコード変更の計画がない場合は、グローバルを直接使用することは悪い考えではありません。

于 2012-08-15T17:57:39.657 に答える
1

関数 B は再利用性を考慮して書かれている可能性が高く、何らかの理由で実際に再利用されることはありませんでした。

理想的には、関数は、グローバル データを共有するのではなく、パラメーターと戻り値 (およびサポートされている場合は例外) を介して排他的に相互に通信する必要があります。これにより、グローバル データ変数が存在しない (または異なる名前を持つ) 他のプログラムでコードをより簡単に再利用できます。

スタックスペースが本当に不足している場合、または引数を渡すよりもグローバルデータを使用する方がはるかに魅力的/安価なオプションになる他の実際の技術的な制限がある場合、グローバルは正しい答えですが、それはまれです。

于 2012-08-15T19:11:12.943 に答える