1

C プログラミング言語でのグローバル変数の使用について質問があります。グローバル変数を使用しない日がこれほど多くなったことはありません。だから、私の質問は: C でグローバル変数を使用するかどうか? 誰かが私に説明を与えることができますか?もちろん、パフォーマンスに関する質問も含めるべきです。

質問に答えるのに役立つより具体的なケース: たとえば、structプログラムによってほとんどすべての関数によってアクセスされる s を保持するグローバル配列がある場合、関数呼び出しごとにこの配列の 2 つのメンバーを取得する必要があります。この場合、アクセスしたいこの配列内のメンバーへの 2 つの変数 (ポインター) を作成する必要があります。このようにfoo_t *x,*y。プログラムの実行中に、さまざまな機能で数回発生します。この特定のケースでは、(それを呼び出す各関数の)グローバル変数またはローカル変数にする必要がxありますか?y

一部の人々は、コンピュータのメモリやプログラムのパフォーマンスにとってコストが高すぎると主張しています。

これが明確であることを願っています。

4

2 に答える 2

1

ほとんどの場合、保守性はパフォーマンスよりも重要です。アプリケーションについてあまり説明していないので、パフォーマンスが重要ではなく、スタックサイズの制限などの問題もないと仮定します。つまり、保守性が優先されます。

その場合、本当の問題は、コードをより明確にし、エラーの可能性を減らすことです。これはケースバイケースの決定ですが、私の一般的なルールは、グローバル、特に複数のファイル スコープを持つグローバルを最小限に抑えることです。

アプリケーションがマルチスレッド化されている場合、状況はさらに明確になり、さらにエキサイティングになります。すべてのグローバル変数は、const であるか、何らかのロックで保護されている必要があります。そして、それには「静的」で宣言された変数が含まれます。物事が本当に共有されている場合にのみ、物事をグローバルにすることで、あなたの人生を楽にしてください.

あなたのケースに戻ります - データ構造のある種の大きなグローバル配列と、その中にいくつかの特定の位置があります。どうやら、一連のルーチンが同じ位置で動作するようです。そうでなければ、質問は意味がありません。コードが最も明確で読みやすいものになるように何でもします。あなたの説明から、それはおそらくそれらをグローバルにするためですが、あなたは私が確信できるほど詳細を提供していません. それらをグローバルにする場合、念のため、それらの名前が明確で明白な意味を持たない限り、それらを x および y と呼ばないでください。たとえば、それらが一緒になってデカルト座標を表す場合などです。

于 2013-05-26T07:39:54.280 に答える