Redundant code

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

In computer programming, redundant code is source code or compiled code in a computer program that is unnecessary, such as:

  • recomputing a value that has previously been calculated[1] and is still available,
  • code that is never executed (known as unreachable code),
  • 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 greater 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

  1. ^ Debray, S. K., Evans, W., Muth, R., and De Sutter, B. 2000. Compiler techniques for code compaction. ACM Trans. Program. Lang. Syst. 22, 2 (Mar. 2000), 378–415.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Redundant_code&oldid=721809755"
This content was retrieved from Wikipedia : http://en.wikipedia.org/wiki/Redundant_code
This page is based on the copyrighted Wikipedia article "Redundant code"; it is used under the Creative Commons Attribution-ShareAlike 3.0 Unported License (CC-BY-SA). You may redistribute it, verbatim or modified, providing that you comply with the terms of the CC-BY-SA