В компьютерном программировании избыточный код — это исходный код или скомпилированный код в компьютерной программе , который не нужен, например:
Инструкция NOP может считаться избыточным кодом, который был явно вставлен для заполнения потока инструкций или введения временной задержки, например, для создания цикла синхронизации путем "траты времени". Идентификаторы , которые объявлены, но никогда не упоминаются, называются избыточными объявлениями .
Следующие примеры написаны на языке C.
int foo ( int iX ) { int iY = iX * 2 ; вернуть iX * 2 ; }
Второе iX*2
выражение является избыточным кодом и может быть заменено ссылкой на переменную iY
. В качестве альтернативы определение int iY = iX*2
может быть удалено.
Учитывать:
#define min(A,B) ((A)<(B)?(A):(B))int shorter_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 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 ; /* Избыточное значение уже рассчитано для сравнения */ 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(), modulo range, больше или равен cutoff, rand() будет вызван второй раз для второго вычисления rand()%range, что может привести к значению, которое на самом деле меньше cutoff. Таким образом, макрос max может не обеспечить предполагаемое поведение для этой функции.