Loading article…
コンピュータ プログラミングにおいて、冗長コードとは、次のようなコンピュータ プログラム内の不要なソース コードまたはコンパイル済みコードを指します。
- 以前に計算された値[1]を再計算し、まだ利用可能な値。
- 決して実行されないコード(到達不能コードと呼ばれる)
- 実行されるが外部に影響を与えないコード(たとえば、プログラムによって生成された出力を変更しないコード。デッドコードと呼ばれる)。
NOP命令は、命令ストリームを埋めるため、または時間遅延を導入するために明示的に挿入された冗長コードであると考えられます。たとえば、「時間を無駄にする」ことでタイミング ループを作成するなどです。 宣言されているが参照されない識別子は、冗長宣言と呼ばれます。
例
次の例はCです。
int foo ( int iX ) { int iY = iX * 2 ;
iX * 2を返します。
2 番目のiX*2式は冗長なコードであり、変数への参照に置き換えることができますiY。あるいは、定義をint iY = iX*2削除することもできます。
考慮する:
#min(A,B) を定義します ((A)<(B)?(A):(B))
int shorten_magnitude ( int u1 , int v1 , int u2 , int v2 ) { /* (u1,v1) と (u2,v2) の短い方の大きさを返します */ return sqrt ( min ( u1 * u1 + v1 * v1 , u2 * u2 + v2 * v2 )); }
C プリプロセッサを使用した結果、コンパイラは展開された形式のみを認識します。
int shorten_magnitude ( int u1 , int v1 , int u2 , int v2 ) { int temp ; if ( u1 * u1 + v1 * v1 < u2 * u2 + v2 * v2 ) temp = u1 * u1 + v1 * v1 ; /* 比較のためにすでに冗長な値が計算されています */ else temp = u2 * u2 + v2 * v2 ; /* 比較のためにすでに冗長な値が計算されています */ return sqrt ( temp ); }
min/max マクロの使用は非常に一般的であるため、最新のコンパイラはそれらの使用によって生じる冗長性を認識して排除するようにプログラムされています。
ただし、次のコードには冗長性はありません。
#define max(A,B) ((A)>(B)?(A):(B))
int random ( int cutoff , int range ) { return max ( cutoff , rand () % range ); }
rand() の最初の呼び出し (範囲を法として) が cutoff 以上の場合、rand() は rand()%range の 2 回目の計算のために 2 回目に呼び出され、その結果として実際には cutoff より低い値が返される可能性があります。したがって、max マクロはこの関数の意図した動作を生成しない可能性があります。
参照
参考文献
- ^ Debray, SK, Evans, W., Muth, R., および De Sutter, B. 2000. コード圧縮のためのコンパイラテクニック。ACM Trans. Program. Lang. Syst. 22, 2 (2000 年 3 月)、378–415。
