Redundant code

From Wikipedia, the free encyclopedia

In computer programming, redundant code is source code or compiled code in a computer program that has any form of redundancy, such as recomputing a value that has previously been calculated[1] and is still available, code that is never executed (known as unreachable code), or code which is executed but has no external effect (e.g., does not change the output produced by a program; known as dead code).

A NOP instruction might be considered to be redundant code that has been explicitly inserted to pad out the instruction stream or introduce a time delay, for example to create a timing loop by "wasting time". Identifiers that are declared, but never referenced, are termed redundant declarations.

Examples

int foo(int iX)
{
    int iY = iX*2;
 
    return iX*2;
}

The second iX*2 expression is redundant code and can be replaced by a reference to the variable iY. Alternatively, the definition int iY = iX*2 can instead be removed.

Consider:

#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));
}

As a consequence of using the C preprocessor, the compiler will only witness the expanded form:

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 */
    else
        temp = u2*u2 + v2*v2; /* Redundant */
    return sqrt(temp);
}

Because the use of min/max macros is very common, modern compilers are trained to recognize and eliminate redundancy caused by their use.

There is no redundancy, however, in the following code:

#define max(A,B) ((A)>(B)?(A):(B))
 
int random(int cutoff, int range)
{
    /* Returns (cutoff, cutoff, cutoff, ...,
       cutoff+1, cutoff+2, ... range)        */
    return max(cutoff, rand()%range);
}

The reason is that its implementation is incorrect. If the initial call to rand(), modulo range, is less than or equal to cutoff, rand() will be called a second time for a second computation of rand()%range, which may result in a value that is actually lower than the cutoff. The max macro will thus not work for this function.

See also

References

This article is issued from Wikipedia. The text is available under the Creative Commons Attribution/Share Alike; additional terms may apply for the media files.