C เป็นภาษารูปแบบอิสระ ซึ่งหมายความว่าคุณสามารถจัดรูปแบบได้หลายวิธีและยังคงเป็นโปรแกรมทางกฎหมาย
ตัวอย่างเช่นคำสั่งเช่น
a = b * c;
สามารถเขียนได้เช่น
a=b*c;
หรือชอบ
a
=
b
*
c
;
ดังนั้นเมื่อคอมไพเลอร์เห็นเส้น
temp = *a
*a = *b;
มันคิดว่ามันหมายถึง
temp = *a * a = *b;
นั่นไม่ใช่นิพจน์ที่ถูกต้องและคอมไพเลอร์จะบ่นเกี่ยวกับสิ่งนั้นแทนอัฒภาคที่ขาดหายไป สาเหตุที่ไม่ถูกต้องเนื่องจากa
เป็นตัวชี้ไปยังโครงสร้างดังนั้นจึง*a * a
พยายามคูณอินสแตนซ์โครงสร้าง ( *a
) ด้วยตัวชี้ไปยังโครงสร้าง ( a
)
แม้ว่าคอมไพลเลอร์จะตรวจไม่พบอัฒภาคที่หายไป แต่ก็ยังรายงานข้อผิดพลาดที่ไม่เกี่ยวข้องทั้งหมดในบรรทัดที่ไม่ถูกต้อง นี่เป็นสิ่งสำคัญที่ต้องสังเกตเพราะไม่ว่าคุณจะดูบรรทัดที่รายงานข้อผิดพลาดมากแค่ไหนก็ไม่มีข้อผิดพลาดที่นั่น บางครั้งปัญหาเช่นนี้คุณจะต้องดูบรรทัดก่อนหน้าเพื่อดูว่าโอเคและไม่มีข้อผิดพลาดหรือไม่
บางครั้งคุณต้องดูในไฟล์อื่นเพื่อค้นหาข้อผิดพลาด ตัวอย่างเช่นหากไฟล์ส่วนหัวกำหนดโครงสร้างเป็นครั้งสุดท้ายในไฟล์ส่วนหัวและเครื่องหมายอัฒภาคที่ยุติโครงสร้างหายไปข้อผิดพลาดจะไม่อยู่ในไฟล์ส่วนหัว แต่อยู่ในไฟล์ที่มีไฟล์ส่วนหัว
และบางครั้งมันก็แย่ลงไปอีก: ถ้าคุณรวมไฟล์ส่วนหัวสองไฟล์ (หรือมากกว่า) และไฟล์แรกมีการประกาศที่ไม่สมบูรณ์ส่วนใหญ่อาจเป็นข้อผิดพลาดทางไวยากรณ์ที่ระบุไว้ในไฟล์ส่วนหัวที่สอง
ที่เกี่ยวข้องนี้คือแนวคิดของข้อผิดพลาดในการติดตาม ข้อผิดพลาดบางอย่างโดยทั่วไปเกิดจากอัฒภาคที่ขาดหายไปจะถูกรายงานเป็นข้อผิดพลาดหลายรายการ นี่คือเหตุผลว่าทำไมจึงควรเริ่มจากด้านบนเมื่อแก้ไขข้อผิดพลาดเนื่องจากการแก้ไขข้อผิดพลาดแรกอาจทำให้ข้อผิดพลาดหลายรายการหายไป
แน่นอนว่าสิ่งนี้สามารถนำไปสู่การแก้ไขข้อผิดพลาดครั้งละหนึ่งรายการและการคอมไพล์บ่อยครั้งซึ่งอาจยุ่งยากกับโครงการขนาดใหญ่ การตระหนักถึงข้อผิดพลาดในการติดตามดังกล่าวเป็นสิ่งที่มาพร้อมกับประสบการณ์และหลังจากเห็นข้อผิดพลาดสองสามครั้งก็ง่ายกว่าที่จะขุดข้อผิดพลาดจริงและแก้ไขข้อผิดพลาดมากกว่าหนึ่งรายการต่อการคอมไพล์ใหม่