Apakah bijaksana menggunakan Dentang untuk analisis kode pribadi dalam proyek yang dibuat dengan gcc?

8

Saya mulai mengerjakan beberapa proyek C yang sedang digunakan gcc. Saya percaya pilihan ini dibuat karena beberapa alasan:

  • Harus kompilasi silang untuk lengan sangat awal (saya pikir).
  • Kinerja adalah spesifikasi pertama dan terpenting.
  • gcc adalah dan masih merupakan pilihan pertama yang mudah.

Saya tidak punya alasan untuk menentang pilihan itu dan saya tidak dalam posisi untuk melakukannya.

Basis kode dari setiap proyek tunggal relatif kecil. Setiap proyek dibangun dengan Makefile yang relatif bersih (saat ini sedang disegarkan), gcc -Wall -Wextrahampir tidak mengeluh sama sekali dan beberapa pengujian minimal dilakukan. Tidak ada analisis statis otomatis atau pemformatan kode yang dilakukan dan kode ini secara sintaksis tidak konsisten, meskipun sangat mudah dibaca dan terasa dipikirkan.

Saya tidak ingin memformat ulang setiap baris kode sekaligus, saya bermaksud melakukan seperti yang dijelaskan di sekitar jawaban ini (terutama karena konteksnya sebenarnya tidak seburuk): refactoring dan terutama memformat ulang sebanyak mungkin ketika berhadapan dengan topik apa pun, tetapi tetap mengambil topik tanpa niat gaya kode dalam pikiran. Sayangnya, saya tidak dalam posisi untuk memaksakan gaya kode atau pemeriksaan tambahan pada komitmen, tetapi saya merasa ada perasaan di antara rekan-rekan saya bahwa Anda harus menghormati konvensi kode yang ada saat memodifikasi file (Meskipun saya menyadari keadaan saat ini) kode tidak secara ajaib terjadi), dan keinginan untuk menulis kode yang baik.

Ini adalah pemrograman pertama saya di C dengan keadaan pikiran seperti itu, dan saya sangat tertarik dengan berbagai analisis kode dan alat pemformatan yang clangmenyediakan.

Inti dari pertanyaan saya adalah: bisakah hal itu menyebabkan masalah untuk mengikuti clangpetunjuk dan menggunakan clangalat pemformatan dan analisis saat membangun gcc? Misalnya, beberapa peringatan bisa datang dari representasi internal yang gcctidak digunakan, atau dari bytecode clangakan menghasilkan gcctidak.

Apakah ada cara yang baik untuk secara otomatis melewati gccparameter kompilasi (terutama arsitektur target dan level optimisasi) clangsehingga petunjuk peringatan masuk akal?

Saya akan menambahkan bahwa saya kenal gccdan pelaporan kesalahannya. Saya tertarik untuk mendapatkan lebih banyak peringatan dan kesalahan (relevan), bukan hanya peringatan yang lebih baik dan lebih dimengerti. Jadi jika saya tidak dapat mempercayai petunjuk tambahan yang clangdapat menghasilkan berdasarkan representasi internal karena saya membangun dengan gccpada akhir hari, maka saya tidak benar-benar tertarik untuk melakukan ini.

Saya memasukkan banyak konteks sehingga merasa bebas untuk membuat komentar atau untuk menjawab pertanyaan mendasar yang tidak dapat saya sampaikan.

nathdwek
sumber
Mengenai konvensi kode, dia berhati-hati untuk tidak mendorong favorit Anda pada proyek yang ada. Tidak mungkin membuat segalanya lebih baik secara signifikan dan dapat mengganggu kontributor lainnya. Hal yang sama berlaku untuk pilihan alat. Sangat mudah untuk teralihkan dengan mengulangi hal-hal dengan cara yang "benar" tanpa benar-benar melakukan perbaikan nyata.
beldaz

Jawaban:

9

Sebagai contoh, beberapa peringatan bisa datang dari representasi internal yang tidak digunakan gcc, atau dari bytecode, dentang akan bermaksud untuk membuat gcc tidak akan.

Sangat tidak mungkin. Dentang memperingatkan Anda tentang kode Anda , bukan beberapa representasi internal yang digunakannya. Semua peringatan harus berasal dari sesuatu yang mencurigakan yang Anda lakukan dalam kode Anda, bukan dari detail implementasi dentang.

Di mana Anda mungkin mengalami masalah adalah jika salah satu kode yang Anda gunakan menggunakan C ++ non-standar. GCC mendukung banyak ekstensi ke C ++ yang tidak akan diterima oleh kompiler lain. Jika Anda menggunakan salah satu dari ini, dentang mungkin hanya menolak untuk mengkompilasi kode Anda. GCC harus mendukung kompilasi banyak kode lama, dan (seperti yang saya mengerti) lebih lunak pada beberapa poin daripada Dentang.

Winston Ewert
sumber
2

Saya menggunakan keduanya di tempat kerja, gcc dan dentang. Anda akan mendapatkan lebih banyak peringatan dengan kedua kompiler bersama, tentu saja, dan ini bagus. Di sisi lain, peringatan tersebut dapat saling bertentangan.

Kasus paling menyebalkan yang saya temukan, adalah ketika dentang mendeteksi defaultaturan switchdan mengatakan semua nilai sudah dibahas dan gcc bersikeras memiliki defaultkasus (didokumentasikan di sini ). Tetapi Anda hanya akan melihat kontradiksi ini ketika Anda memasang peringatan yang sangat ketat pada kedua kompiler.

Secara subyektif, saya akan mengatakan bahwa dentang telah mendapat peringatan yang lebih ketat dan Anda bahkan dapat memperoleh lebih banyak darinya jika Anda menggunakan -Weverythingatau bahkan penganalisis dentang (penganalisa kode statis). Tapi saya juga punya peringatan yang ditemukan gcc dan juga penting.

Sebagian besar saklar kompiler memiliki nama yang persis sama. Nama sakelar peringatan berbeda. Ini mungkin menjengkelkan jika Anda memutuskan untuk menggunakan -Wno-*opsi untuk menonaktifkan peringatan. Anda tidak akan dapat menghindari kompilasi bersyarat di make / cmake, sejauh yang saya bisa lihat, tetapi tidak sulit untuk menyelesaikannya.

Saya akan menghindari memformat kode dengan alat otomatis. Ini menjengkelkan karena mencemari hasil menyalahkan. Dan kemudian penggabungan yang berjalan lama mungkin menjadi sangat sulit.

Martin Sugioarto
sumber