Saya tidak pernah mengerti mengapa kompiler C dan C ++ mencoba untuk memulihkan dari kesalahan dan melanjutkan parsing. Hampir selalu, kesalahan pertama menghasilkan aliran kesalahan palsu yang akan hilang segera setelah yang pertama diperbaiki. Setelah beberapa tahun pengalaman, saya hanya berhenti melihat kesalahan apa pun kecuali yang pertama dari setiap file. Saya menjalankan kembali kompiler dan kemudian melakukannya lagi sampai tidak ada lagi kesalahan. Apakah ini praktik umum?
c++
c
error-messages
compiler
alexk7
sumber
sumber
Jawaban:
Terkadang kesalahan tidak terkait. Saya merasa lebih mudah untuk melihat daftar kesalahan dan memperbaiki akar penyebab dari serangkaian kesalahan terkait, kemudian memperbaiki kesalahan yang tidak terkait berikutnya . Jika proyek ini besar dan membutuhkan waktu cukup lama untuk dibangun, saya merasa bekerja dengan cara ini kurang membuat frustrasi daripada memperbaiki kesalahan pertama, mengkompilasi ulang, ulangi ...
sumber
Itu tergantung pada waktu kompilasi . Sebagai contoh, jika saya tahu bahwa saya baru saja mengubah header utama yang akan memicu pembangunan kembali seluruh proyek, saya pasti akan melihat lebih dekat pada sisa tumpukan kesalahan dan melihat apakah saya dapat memperbaikinya. Itu memberi saya perasaan yang lebih baik ketika saya berdiri untuk membuat kopi saat kompiler berjalan.
sumber
Ya saya melakukan hal yang sama, kecuali saya menggunakan kompiler untuk membantu saya refactor dalam hal ini saya suka daftar lengkap kesalahan :)
sumber
Jika ada kesenjangan di nomor baris, compiler mungkin tidak pulih dan kemudian menemukan kesalahan lain.
Biasanya hanya mencoba untuk memperbaiki satu kesalahan dalam setiap kelompok.
sumber
Kompiler yang lebih baik akan menghasilkan hasil yang lebih baik dan memberikan Anda kesalahan yang lebih bermanfaat setelah yang pertama, sering kali melalui semacam koreksi otomatis kesalahan sehingga kode yang mungkin baik setidaknya dapat diperiksa. Tapi kemudian, saya terbiasa bekerja di Java, di Eclipse, di mana kesalahan ketik sintaks langsung terdeteksi dan mudah diperbaiki, dan kesalahan kompiler lainnya cenderung lebih beragam dan lebih mudah bagi kompiler untuk pulih. Saya hanya dapat berasumsi bahwa ini mirip ketika bekerja di IDE Microsoft dan yang lainnya di C ++ atau C #.
sumber
Ya - atau setidaknya saya membaca sekilas tentang mereka. Sangat mudah untuk mencari tahu apakah kesalahan terkait (biasanya melihat nomor baris sudah cukup) dan saya suka memperbaiki semuanya dalam satu pass dan kemudian mengkompilasi ulang.
sumber
Saya melakukan ini (untuk membaca kesalahan melewati yang pertama) hanya jika kompilasi 1 cpp sangat panjang. Atau tidak tersedia. Kemudian saya lebih memilih untuk memastikan saya memperbaiki semua yang saya bisa mengidentifikasi dalam kesalahan kompiler sebagai tidak terkait dengan kesalahan pertama.
Ketika file cpp Anda dapat dikompilasi sendiri dan dilakukan dalam waktu kurang dari satu detik (atau Anda memiliki kesalahan pengarahan "intellisense" sebelum kompilasi dimulai) Anda tidak harus melakukan ini sebagian besar waktu.
Saat ini saya bekerja pada proyek di mana saya tidak dapat mengkompilasi satu cpp saja (dan saya tidak memiliki tangan pada sistem build jadi saya tidak dapat mengubah O__o itu) dan beberapa file cpp dapat membutuhkan waktu lebih dari sepuluh menit untuk dikompilasi ( bahkan setelah banyak upaya untuk mengurangi itu, kami hanya memotongnya hingga 50% dari waktu kompilasi asli ...).
Dalam pengaturan kompilasi yang sangat panjang ini, Anda cenderung berpikir banyak sebelum memukul "build" ... dan bahkan berpikir banyak setelahnya, untuk mungkin menemukan bug sebelum kompiler karena Anda tentu lebih cepat mendapatkannya secara mental daripada .
sumber
Cukup umum untuk melakukan apa yang Anda lakukan. Saya biasanya memberitahu peserta magang atau pemula yang kewalahan dengan jumlah kesalahan untuk mengabaikan hampir semua kesalahan kecuali yang pertama. Kemungkinan besar itu adalah kesalahan nyata yang perlu diperbaiki, dan bukan kesalahan hantu menyesatkan yang disebabkan oleh kesalahan sebelumnya. Beberapa kompiler (paling?) Memiliki opsi untuk berhenti mengkompilasi setelah kesalahan pertama karena alasan ini. Membangun sistem biasanya dapat dikonfigurasi untuk berhenti setelah file pertama yang memiliki kesalahan juga.
Namun, ada alasan untuk melanjutkan kompilasi setelah mendeteksi kesalahan juga. Misalnya, Anda mungkin ingin menghitung berapa banyak file yang memiliki kesalahan, atau untuk melihat apakah file header yang disertakan menyebabkan kesalahan di lebih dari satu file.
sumber