2016-04-14 16 views
0

コードファイル(6k行)が発生しました。これはグローバル変数で完全に機能し、void func(void)を操作する多くの関数を持っていますが、大域変数を多く変更しています。グローバルのいくつかは、構造体の構造体と関数へのポインタを持つ構造体であるため、HUGEです。ポインタの代わりにグローバル変数を使用する利点はありますか?

コードには実際のインターフェイスの説明はなく「どこでも」動作するため、読みにくく、保守が難しく、テストするのが難しいです。そしてそれはすでにコントローラでかなりの時間使用されています。だから、誰かが自分のためにコード化したゴミだけではありません。

私はこのようにコードする理由があるのだろうと思っています(ポインタを使用する代わりに完全にグローバルで作業しています)?それはおそらくより速いか小さいか、ポインタを使ってうまく構造化された関数よりもこれをより有用にする他の利点がありますか?これはこれまでのコーディングについて学んだことすべてに反するからです。

+0

IMOグローバルを悪用するメリットはあまりありません。プログラムは滑らかに速く動くかもしれませんが、少し小さくなるかもしれませんが、これはおそらく関連性がありません。 –

+0

大域変数を広範囲に使用すると、テストや保守が難しい(あなたの言うように)コードになります。グローバルにはその用途と目的がありますが、私はそれらを広範な方法で使用することで利点を見ることはできません。 – Henningsson

+0

と思うと、コードは小さなプログラマーからグローバルに成長し、複雑な遺産に発展しました。誰もそれをリファクタリングする時間と労力を費やしませんでした。なぜなら、それはちょうど働いたからです(ncars)。 –

答えて

2

まず、どのアプリケーションでも、グローバルで定数でない変数を使用する理由はありません。プログラム全体で利用できるように、グローバル。

staticファイルスコープ変数が意味をなす場合もあります。 staticキーワードは、変数がグローバルであることをブロックします。翻訳単位(cファイルとインクルードされたヘッダーを意味します)が宣言されている場合にのみ使用できます。

ような設計は理にかなっていくつかの例:自律コードモジュールを設計するとき

  • (クラス、のADTまたは何でもそれらを呼び出す)と、1つのインスタンスのみが存在することを確認することができ、使用すると便利かもしれませんstaticファイルスコープ変数を「poor man's private」とします。呼び出し元に何らかのAPIを提供すると、ほとんどの場合、プライベート内部変数が必要になります。

    この方法は、組み込みシステムでは一般的なシングルコアプログラミングです。再入力コードがはるかに重要であるデスクトッププログラミングではそれほど重要ではありません。

  • 特別なケース。呼び出し元と割り込みサービスルーチンまたはコールバック関数の間で変数を共有する場合、パラメータ渡しはオプションではない可能性があります。そして、ファイルスコープ変数staticを使用する以外に選択肢はありません。

    (このような変数は、コンパイラがISR /コールバックが実行されたことを認識していない場合には、コンパイラのオプティマイザのバグを防ぐためにvolatileとしてもを宣言する必要があります。)


唯一の理由何故なら何らかの理由で1つのファイルとして配信する必要があるライブラリを書いているので、2k LOCよりも大きなファイルを書くのはなぜですか?たとえば、標準Cライブラリのより複雑なライブラリファイルの1つを記述している場合です。

これはあなたがやっていることではない場合は、はありません。 6k LOCファイルの期間を書き留めてください。それを複雑なデータ型で埋めることはできません。

上記の最初のような場合でも、複数のファイルを分割することはありません。ほとんどの場合、実際には2k LOCを超えてエスカレートする "main.c"であり、分割が容易でなければなりません。

残念ながら、あなたが維持しているコードが初心者によって書かれていると思われます。それは珍しいことではありません、プロのプログラマーとして働く人は、最初の5年の間にそのようなモンスターを書きます。サウンドプログラムの設計は、経験を通してほとんどが学ぶものです。

0

このようにするのは本当のメリットはありません。グローバル変数を使用することで得られる限界的な性能向上は、コンパイラーが最適化を行っている間はほとんどの場合コンパイラーがほぼ確実に行います。記述したコードは、判読不能および標準不適合のため修正するのに数時間かかることがあります。

関連する問題