คุณอ่านข้อผิดพลาดการคอมไพล์ C หรือ C ++ หลังจากข้อผิดพลาดแรกหรือไม่


19

ฉันไม่เคยเข้าใจเลยว่าทำไมคอมไพเลอร์ C และ C ++ จึงพยายามกู้คืนจากข้อผิดพลาดและทำการแยกวิเคราะห์ต่อไป เกือบตลอดเวลาข้อผิดพลาดแรกสร้างกระแสข้อผิดพลาดปลอมที่จะหายไปทันทีที่มีการแก้ไขข้อผิดพลาดแรก หลังจากประสบการณ์หลายปีฉันก็หยุดดูข้อผิดพลาดใด ๆ ยกเว้นไฟล์แรกของทุกไฟล์ ฉันรันคอมไพเลอร์แล้วทำอีกครั้งจนกว่าจะไม่มีข้อผิดพลาดอีก มันเป็นเรื่องธรรมดา


ฉันเดาว่าฉันจะอ่านแค่อันแรกเท่านั้น แต่ฉันไม่ได้ทำงานกับแหล่งไฟล์แก้ปัญหาพันล้านครั้งดังนั้นมันจึงช่วยได้
Coder

คำตอบ:


19

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


3
+1: โปรดทราบว่าหากโครงการมีขนาดใหญ่และใช้เวลาสักครู่ในการสร้างก็ควรที่จะไม่เปลี่ยนแปลงมากเกินไประหว่างการคอมไพล์เพื่อให้คุณสามารถพบปัญหาใด ๆ ที่คุณแนะนำได้ค่อนข้างง่าย
Donal Fellows

ฉันยอมรับว่าในกรณีที่เวลาในการรวบรวมของคุณยาวมากอาจเป็นประโยชน์ในการค้นหาข้อผิดพลาดที่ไม่เกี่ยวข้องอื่น ๆ แต่ฉันต้องการแก้ไขปัญหาการพึ่งพาที่ทำให้เกิดงานสร้างเพิ่มขึ้นเหล่านั้นนาน ...
alexk7

8

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


4

ใช่ฉันทำเช่นเดียวกันเว้นแต่ฉันจะใช้คอมไพเลอร์เพื่อช่วยฉัน refactor ซึ่งในกรณีนี้ฉันชอบรายการข้อผิดพลาดทั้งหมด :)


IDEs ที่ทันสมัยหลายแห่งมีเครื่องมือการปรับโครงสร้างใหม่ที่คลิกปุ่มเพียงปุ่มเดียวดังนั้นจึงไม่จำเป็นต้องใช้ refactor-by-compiler-error หากคุณมีการเข้าถึงและความสามารถด้วยเครื่องมือดังกล่าว ถ้าคุณไม่ชอบมัน ...
FrustratedWithFormsDesigner

1
ใช่ แต่งานหลักของฉัน IDE VS ไม่มีสำหรับ C ++ :( เมื่อไม่มีเครื่องมือฉันจะหาวิธี!
สตีเฟ่น Bailey

1
Visual Assist X จาก Whole Tomato เพิ่มการเปลี่ยนโครงสร้างเป็น VS สำหรับ C ++
stonemetal

4

หากมีช่องว่างในตัวเลขบรรทัดคอมไพเลอร์อาจจะไม่กู้แล้วพบข้อผิดพลาดอีก

โดยปกติแล้วจะพยายามแก้ไขข้อผิดพลาดเดียวในแต่ละกลุ่ม


1

คอมไพเลอร์ที่ดีกว่าจะให้ผลลัพธ์ที่ดีกว่าและให้ข้อผิดพลาดที่มีประโยชน์มากขึ้นหลังจากคอมมิชชันแรกบ่อยครั้งผ่านการแก้ไขข้อผิดพลาดบางประเภทโดยอัตโนมัติเพื่อให้สามารถตรวจสอบโค้ดที่ดีอย่างน้อยได้ แต่ก่อนหน้านี้ฉันเคยทำงานกับ Java ใน Eclipse ซึ่งมีการตรวจพบความผิดพลาดทางไวยากรณ์และแก้ไขได้อย่างง่ายดายและข้อผิดพลาดคอมไพเลอร์อื่น ๆ มักจะมีความหลากหลายและง่ายขึ้นสำหรับคอมไพเลอร์ในการกู้คืน ฉันสามารถสันนิษฐานได้ว่ามันคล้ายกันเมื่อทำงานใน IDE ของ Microsoft และอื่น ๆ ใน C ++ หรือ C #


0

ใช่ - หรืออย่างน้อยฉันก็อ่านมัน มันค่อนข้างง่ายที่จะเข้าใจว่าข้อผิดพลาดนั้นเกี่ยวข้องกันหรือไม่ (โดยทั่วไปแล้วดูที่หมายเลขบรรทัดนั้นเพียงพอ) และฉันชอบแก้ไขทั้งหมดในครั้งเดียวแล้วทำการคอมไพล์ใหม่


0

ฉันทำเช่นนี้ (อ่านข้อผิดพลาดที่ผ่านมาหนึ่ง) เฉพาะในกรณีที่การรวบรวม 1 cpp ยาวมาก หรือไม่ว่าง จากนั้นฉันต้องการให้แน่ใจว่าฉันแก้ไขทุกอย่างที่ฉันสามารถระบุได้ในข้อผิดพลาดของคอมไพเลอร์ว่าไม่เกี่ยวข้องกับข้อผิดพลาดแรก

เมื่อไฟล์ cpp ของคุณสามารถรวบรวมได้เพียงอย่างเดียวและใช้เวลาน้อยกว่าหนึ่งวินาที (หรือคุณมีข้อผิดพลาดในการชี้ "intellisense" ก่อนที่จะเริ่มต้นการคอมไพล์) คุณไม่ต้องทำแบบนี้เป็นส่วนใหญ่

ขณะนี้ฉันทำงานในโครงการที่ฉันไม่สามารถรวบรวมหนึ่ง cpp เพียงอย่างเดียว (และฉันไม่มีมือในระบบ build ดังนั้นฉันไม่สามารถเปลี่ยน O__o ได้) และบางไฟล์ cpp อาจใช้เวลามากกว่าสิบนาทีในการคอมไพล์ ( แม้จะใช้ความพยายามอย่างมากในการลดจำนวนนั้นเราก็ลดได้เพียง 50% ของเวลาการรวบรวมดั้งเดิม ... )

ในการตั้งค่าการคอมไพล์แบบยาวมากคุณมักจะคิดมากก่อนที่จะกดปุ่ม "build" ... และแม้แต่คิดมากอีกครั้งเพื่อหาข้อผิดพลาดต่อหน้าคอมไพเลอร์เนื่องจากคุณเร็วกว่าที่จะทำให้พวกเขามีจิตใจมากกว่า .


-1

เป็นเรื่องปกติที่จะทำอย่างที่คุณทำ ฉันมักจะบอกฝึกงานหรือโปรแกรมเมอร์สามเณรจมจำนวนข้อผิดพลาดที่จะละเว้นข้อผิดพลาดเกือบทั้งหมดยกเว้นคนแรก เป็นไปได้ว่าเป็นข้อผิดพลาดจริงที่ต้องแก้ไขไม่ใช่ข้อผิดพลาดที่ทำให้เข้าใจผิดที่เกิดจากข้อผิดพลาดก่อนหน้า คอมไพเลอร์ (ส่วนใหญ่?) บางตัวเลือกที่จะหยุดการคอมไพล์หลังจากข้อผิดพลาดแรกด้วยเหตุผลนี้ ระบบการสร้างมักจะสามารถกำหนดค่าให้หยุดหลังจากไฟล์แรกที่มีข้อผิดพลาดเช่นกัน

อย่างไรก็ตามมีเหตุผลในการรวบรวมอย่างต่อเนื่องหลังจากตรวจพบข้อผิดพลาดด้วย ตัวอย่างเช่นคุณอาจต้องการนับจำนวนไฟล์ที่มีข้อผิดพลาดหรือดูว่าไฟล์ส่วนหัวที่รวมอยู่ทำให้เกิดข้อผิดพลาดในไฟล์มากกว่าหนึ่งไฟล์หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.