중복코드

Redundant code

컴퓨터 프로그래밍에서 중복 코드다음과 같이 불필요한 컴퓨터 프로그램의 소스 코드 또는 컴파일된 코드다.

  • 이전에 계산된[1] 값을 다시 계산하고 여전히 사용할 수 있는 값
  • 실행되지 않는 코드(접근할 수 없는 코드라고 함)
  • 실행되지만 외부 효과는 없는 코드(예: 프로그램에 의해 생성된 출력을 변경하지 않음, 데드 코드라고 함)

NOP 지침은 명령 스트림을 패딩하거나 시간 지연을 도입하기 위해 명시적으로 삽입된 중복 코드로 간주될 수 있다. 예를 들어 "시간 낭비"에 의한 타이밍 루프를 생성하기 위한 것이다.선언되었지만 결코 참조되지 않는 식별자중복 선언이라고 한다.

다음의 예는 C에 있다.

인트로 foo(인트로 iX) {     인트로 IY = iX*2;      돌아오다 iX*2; } 

두 번째iX*2식은 중복 코드이며 변수에 대한 참조로 대체될 수 있다.iY. 또는 정의int iY = iX*2대신 제거할 수 있다.

고려 사항:

#Define min(A,B) ((A)<(B)?(A):(B)  인트로 길이가 더 짧은_크기(인트로 u1, 인트로 v1, 인트로 u2, 인트로 v2) {     /* (u1,v1) 및 (u2,v2)의 짧은 크기 */     돌아오다 sqrt((u1*u1 + v1*v1, u2*u2 + v2*v2)); } 

C 전처리기 사용의 결과, 컴파일러는 확장된 형태만 볼 수 있다.

인트로 길이가 더 짧은_크기(인트로 u1, 인트로 v1, 인트로 u2, 인트로 v2) {     인트로 임시 변통하다;     만일 (u1*u1 + v1*v1 < u2*u2 + v2*v2)         임시 변통하다 = u1*u1 + v1*v1; /* 비교를 위해 이미 계산된 중복성 */     다른         임시 변통하다 = u2*u2 + v2*v2; /* 비교를 위해 이미 계산된 중복성 */     돌아오다 sqrt(임시 변통하다); } 

최소/최대 매크로의 사용이 매우 일반적이기 때문에, 현대 컴파일러는 그 사용으로 인한 중복성을 인식하고 제거하도록 프로그램되어 있다.

그러나 다음 코드에는 중복성이 없다.

#define max(A,B) (A)>(B)?(A):(B)  인트로 무작위의(인트로 끊어내다, 잘라 버리다, 인트로 범위) {     돌아오다 맥스.(끊어내다, 잘라 버리다, 랜드()%범위); } 

modulo 범위인 란드()에 대한 초기 호출이 컷오프보다 크거나 같으면, 랜드()는 실제로 컷오프보다 낮은 값이 될 수 있는 랜드()% 범위의 두 번째 계산을 위해 두 번째 호출된다.따라서 최대 매크로는 이 함수에 대해 의도된 동작을 생성하지 않을 수 있다.

참고 항목

참조