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