Nadbytečný kód - Redundant code
V programování počítače , redundantní kód je zdrojový kód nebo zkompilovaný kód v počítačovém programu , který je zbytečné, jako například:
- přepočítání hodnoty, která byla dříve vypočítána a je stále k dispozici,
- kód, který není nikdy spuštěn (známý jako nedostupný kód ),
- kód, který je spuštěn, ale nemá žádný vnější účinek (např. nemění výstup produkovaný programem; známý jako mrtvý kód ).
NOP instrukce by mohla být považována za nadbytečná kód, který byl výslovně vložen do vložky ven instrukčního proudu nebo zavést časové prodlevy, například pro vytvoření časové smyčky podle „doby výpadku“. Identifikátory, které jsou deklarovány, ale nikdy na ně není odkazováno, se nazývají nadbytečné deklarace .
Příklady
Následující příklady jsou v C .
int foo(int iX)
{
int iY = iX*2;
return iX*2;
}
Druhý iX*2výraz je nadbytečný kód a lze jej nahradit odkazem na proměnnou iY. Alternativně lze definici int iY = iX*2místo toho odstranit.
Zvážit:
#define min(A,B) ((A)<(B)?(A):(B))
int shorter_magnitude(int u1, int v1, int u2, int v2)
{
/* Returns the shorter magnitude of (u1,v1) and (u2,v2) */
return sqrt(min(u1*u1 + v1*v1, u2*u2 + v2*v2));
}
V důsledku použití preprocesoru C kompilátor uvidí pouze rozbalený formulář:
int shorter_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; /* Redundant already calculated for comparison */
else
temp = u2*u2 + v2*v2; /* Redundant already calculated for comparison */
return sqrt(temp);
}
Protože je používání min/max maker velmi běžné, jsou moderní překladače naprogramovány tak, aby rozpoznávaly a eliminovaly nadbytečnost způsobenou jejich používáním.
V následujícím kódu však není nadbytečnost:
#define max(A,B) ((A)>(B)?(A):(B))
int random(int cutoff, int range)
{
return max(cutoff, rand()%range);
}
Pokud je počáteční volání rand (), modulo range, větší nebo rovné cutoff, bude rand () voláno podruhé pro druhý výpočet rozsahu rand ()%, což může mít za následek hodnotu, která je ve skutečnosti nižší než mezní hodnota. Makro max tedy nemusí vytvářet zamýšlené chování pro tuto funkci.