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 -Wextra
hampir 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 clang
menyediakan.
Inti dari pertanyaan saya adalah: bisakah hal itu menyebabkan masalah untuk mengikuti clang
petunjuk dan menggunakan clang
alat pemformatan dan analisis saat membangun gcc
? Misalnya, beberapa peringatan bisa datang dari representasi internal yang gcc
tidak digunakan, atau dari bytecode clang
akan menghasilkan gcc
tidak.
Apakah ada cara yang baik untuk secara otomatis melewati gcc
parameter kompilasi (terutama arsitektur target dan level optimisasi) clang
sehingga petunjuk peringatan masuk akal?
Saya akan menambahkan bahwa saya kenal gcc
dan 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 clang
dapat menghasilkan berdasarkan representasi internal karena saya membangun dengan gcc
pada 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.
sumber
Jawaban:
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.
sumber
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
default
aturanswitch
dan mengatakan semua nilai sudah dibahas dan gcc bersikeras memilikidefault
kasus (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
-Weverything
atau 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.
sumber