Избыточный код - Википедия - Redundant code

В компьютерное программирование, избыточный код является исходный код или скомпилированный код в компьютерная программа это не нужно, например:

  • пересчет значения, которое было ранее вычислено[1] и по-прежнему доступен,
  • код, который никогда не выполняется (известный как недостижимый код ),
  • код, который выполняется, но не имеет внешнего эффекта (например, не изменяет вывод, производимый программой; известный как мертвый код ).

А NOP инструкцию можно рассматривать как избыточный код, который был явно вставлен для дополнения инструкция поток или ввести временную задержку, например, чтобы создать цикл синхронизации "тратить время зря". Идентификаторы объявленные, но никогда не упоминаемые, называются повторяющиеся объявления.

Примеры

Следующие примеры находятся в C.

int фу(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) * /    возвращаться sqrt(мин(u1*u1 + v1*v1, u2*u2 + v2*v2));}

Как следствие использования Препроцессор C, компилятор увидит только развернутую форму:

int shorter_magnitude(int u1, int v1, int u2, int v2){    int темп;    если (u1*u1 + v1*v1 < u2*u2 + v2*v2)        темп = u1*u1 + v1*v1; / * Избыточность уже рассчитана для сравнения * /    еще        темп = u2*u2 + v2*v2; / * Избыточность уже рассчитана для сравнения * /    возвращаться sqrt(темп);}

Поскольку использование макросов min / max очень распространено, современные компиляторы запрограммированы на распознавание и устранение избыточности, вызванной их использованием.

Однако в следующем коде нет избыточности:

#define max (A, B) ((A)> (B)? (A) :( B))int случайный(int отрезать, int классифицировать){    возвращаться Максимум(отрезать, ранд()%классифицировать);}

Если первоначальный вызов rand () по модулю диапазона больше или равен отсечке, rand () будет вызываться второй раз для второго вычисления диапазона rand ()%, что может привести к значению, которое на самом деле ниже чем отсечка. Таким образом, макрос max может не вызывать предполагаемого поведения этой функции.

Смотрите также

Рекомендации