รหัสซ้ำซ้อน

ในการเขียนโปรแกรมคอมพิวเตอร์ โค้ดซ้ำซ้อน คือซอร์สโค้ดหรือโค้ดที่คอมไพล์แล้วในโปรแกรมคอมพิวเตอร์ที่ไม่จำเป็น เช่น

 คำนวณค่าที่คำนวณไว้ก่อนหน้านี้อีกครั้ง 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. และยังคงมีอยู่
 รหัสที่ไม่เคยถูกเรียกใช้งาน (เรียกว่า รหัสที่ไม่สามารถเข้าถึงได้ )
 รหัสที่ถูกดำเนินการ แต่ไม่มีผลกระทบภายนอก (เช่น ไม่เปลี่ยนเอาต์พุตที่สร้างโดยโปรแกรม เรียกว่า รหัสที่ไม่ทำงาน )

โดยคำสั่ง NOP อาจพิจารณาว่าเป็นโค้ดซ้ำซ้อนที่ได้รับการแทรกไว้อย่างชัดเจนเพื่อขยายสต รีมของ คำสั่งหรือทำให้เกิดการหน่วงเวลา ตัวอย่างเช่น เพื่อสร้าง ไทม์มิ่งลูปโดยเป็นตัวระบุ ที่ได้รับการประกาศแต่ไม่เคยอ้างอิงถึงจะเรียกว่าการประกาศซ้ำซ้อน

 ตัวอย่าง 
ตัวอย่างต่อไปนี้อยู่ใน ภาษาซี

นิพจน์ iX*2 ที่สองเป็นโค้ดที่ซ้ำซ้อนและสามารถแทนที่ได้ด้วย การอ้างอิงถึงตัวแปร iY หรือสามารถลบคำจำกัดความ int iY = iX*2 ออกแทนได้
พิจารณา:
int foo(int iX)
{
    int iY = iX*2;

    return iX*2;
}

จากผลของการใช้ตัวประมวลผลล่วงหน้าซีคอมไพเลอร์จะเห็นเฉพาะรูปแบบที่ขยาย:
#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));
}

เนื่องจากการใช้มาโครต่ำสุด/สูงสุดเป็นเรื่องปกติ คอมไพเลอร์สมัยใหม่จึงถูกตั้งโปรแกรมให้จดจำและกำจัดความซ้ำซ้อนที่เกิดจากการใช้งาน

ไม่มีความซ้ำซ้อนในรหัสต่อไปนี้:
#define max(A,B) ((A)>(B)?(A):(B))

int random(int cutoff, int range)
{
    return max(cutoff, rand()%range);
}
หากการเรียกครั้งแรกไปที่ rand() ช่วงโมดูโลมากกว่าหรือเท่ากับจุดตัด rand() จะถูกเรียกเป็นครั้งที่สองสำหรับการคำนวณครั้งที่สองของช่วง rand()% ซึ่งอาจส่งผลให้ค่าที่ต่ำกว่าจริง ๆ กว่าจุดตัด มาโครสูงสุดอาจไม่สร้างลักษณะการทำงานที่ต้องการสำหรับฟังก์ชันนี้

 ดูสิ่งนี้ด้วย 

 รหัสบวม
 การใช้รหัสซ้ำ
 การกำจัดนิพจน์ย่อยทั่วไป
 อย่าพูดซ้ำตัวเอง
 รหัสที่ซ้ำกัน
 ความซ้ำซ้อน

 อ้างอิง 

หมวดหมู่:รหัสต้นทาง