รหัสซ้ำซ้อน
บทความนี้อาจต้องการตรวจสอบต้นฉบับ ในด้านไวยากรณ์ รูปแบบการเขียน การเรียบเรียง คุณภาพ หรือการสะกด คุณสามารถช่วยพัฒนาบทความได้ |
บทความนี้ไม่มีการอ้างอิงจากแหล่งที่มาใด |
ในการเขียนโปรแกรมคอมพิวเตอร์ โค้ดซ้ำซ้อน คือซอร์สโค้ดหรือโค้ดที่คอมไพล์แล้วในโปรแกรมคอมพิวเตอร์ที่ไม่จำเป็น เช่น
- คำนวณค่าที่คำนวณไว้ก่อนหน้านี้อีกครั้ง [1] และยังคงมีอยู่
- รหัสที่ไม่เคยถูกเรียกใช้งาน (เรียกว่า รหัสที่ไม่สามารถเข้าถึงได้ )
- รหัสที่ถูกดำเนินการ แต่ไม่มีผลกระทบภายนอก (เช่น ไม่เปลี่ยนเอาต์พุตที่สร้างโดยโปรแกรม เรียกว่า รหัสที่ไม่ทำงาน )
โดยคำสั่ง 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()% ซึ่งอาจส่งผลให้ค่าที่ต่ำกว่าจริง ๆ กว่าจุดตัด มาโครสูงสุดอาจไม่สร้างลักษณะการทำงานที่ต้องการสำหรับฟังก์ชันนี้