Saya kuliah, dan untuk sebuah proyek kami menggunakan C. Kami telah menjelajahi GCC dan Dentang, dan Dentang tampaknya jauh lebih ramah pengguna daripada GCC. Akibatnya, saya bertanya-tanya apa keuntungan atau kerugian menggunakan clang, berbeda dengan GCC, untuk pengembangan di C dan C ++ di Linux?
Dalam kasus saya ini akan digunakan untuk program tingkat siswa, bukan produksi.
Jika saya menggunakan Dentang, haruskah saya men-debug dengan GDB dan menggunakan GNU Make, atau menggunakan debugger lain dan membuat utilitas?
<atomic>
tidak didukung, mungkin beberapa hal kecil lainnya hilang ... Saya tidak dapat menggunakannya, jadi saya tidak sepenuhnya dapat mempercepatnya).Jawaban:
EDIT:
Orang-orang gcc benar-benar meningkatkan pengalaman diagnosis dalam gcc (kompetisi ah). Mereka membuat halaman wiki untuk memamerkannya di sini . gcc 4.8 sekarang memiliki diagnostik yang cukup baik (gcc 4.9x menambahkan dukungan warna). Dentang masih memimpin, tetapi celahnya semakin dekat.
Asli:
Untuk siswa, saya akan merekomendasikan Dentang tanpa syarat.
Kinerja dalam hal kode yang dihasilkan antara gcc dan Clang sekarang tidak jelas (meskipun saya pikir gcc 4.7 masih memiliki petunjuk, saya belum melihat tolok ukur konklusif), tetapi bagi siswa untuk mempelajarinya tidak terlalu penting.
Di sisi lain, diagnostik Clang yang sangat jernih jelas lebih mudah bagi para pemula untuk menafsirkannya.
Pertimbangkan cuplikan sederhana ini:
Anda akan segera melihat bahwa titik koma hilang setelah definisi
Student
kelas, benar :)?Nah, gcc memperhatikannya juga , setelah mode:
Dan Dentang juga tidak benar-benar dibintangi di sini, tetapi tetap:
Saya sengaja memilih contoh yang memicu pesan kesalahan yang tidak jelas (berasal dari ambiguitas dalam tata bahasa) daripada contoh "Oh my god Clang read my mind" contoh. Namun, kami melihat bahwa Dentang menghindari banjir kesalahan. Tidak perlu menakuti siswa.
sumber
Sampai sekarang, GCC memiliki dukungan yang jauh lebih baik dan lebih lengkap untuk fitur C ++ 11 daripada Dentang. Juga, pembuat kode untuk GCC melakukan optimasi yang lebih baik daripada yang ada di Dentang (dalam pengalaman saya, saya belum melihat tes lengkap).
Di sisi lain, Dentang sering mengkompilasi kode lebih cepat dari GCC, dan menghasilkan pesan kesalahan yang lebih baik ketika ada sesuatu yang salah dengan kode Anda.
Pilihan mana yang akan digunakan benar-benar tergantung pada hal-hal apa yang penting bagi Anda. Saya menghargai dukungan C ++ 11 dan kualitas pembuatan kode lebih dari saya menghargai kenyamanan kompilasi. Karena itu, saya menggunakan GCC. Bagi Anda, pengorbanannya bisa berbeda.
sumber
Saya menggunakan keduanya karena kadang-kadang mereka memberikan pesan kesalahan yang berbeda dan bermanfaat.
Proyek Python dapat menemukan dan memperbaiki sejumlah buglets kecil ketika salah satu pengembang inti pertama kali mencoba kompilasi dengan dentang.
sumber
Saya menggunakan Clang dan GCC, saya menemukan Clang memiliki beberapa peringatan yang berguna, tetapi untuk tolok ukur ray-tracing saya sendiri - secara konsisten 5-15% lebih lambat dari GCC (mengambilnya dengan butiran garam tentu saja, tetapi mencoba menggunakan flag optimasi yang serupa untuk keduanya).
Jadi untuk saat ini saya menggunakan analisis statis Dentang dan peringatannya dengan makro kompleks: (meskipun sekarang peringatan GCC hampir sama baiknya - gcc4.8 - 4.9).
Beberapa pertimbangan:
QtCreator misalnya*****). EDIT: QtCreator sekarang mendukung output Dentang***** - area ini dalam pengembangan aktif dan mungkin segera didukung
sumber
Untuk program tingkat siswa, Dentang memiliki manfaat, secara default, wrt ketat. standar C. Misalnya, versi K&R Hello World berikut diterima tanpa peringatan oleh GCC, tetapi ditolak oleh Dentang dengan beberapa pesan kesalahan yang cukup deskriptif:
Dengan GCC, Anda harus memberikannya
-Werror
agar benar-benar menunjukkan bahwa ini bukan program C89 yang valid. Selain itu, Anda masih perlu menggunakanc99
ataugcc -std=c99
untuk mendapatkan bahasa C99.sumber
gcc
umumnya harus dipanggil dengan paling tidak-Wall
, yang memang memperingatkan untuk program ini.clang
tidak menghasilkan peringatan / kesalahan yang baik.gnu99
, dangnu++98
dangnu++0x
. Saya pikir itu adalah ekstensi asli , meskipun, yaitu mereka akan mengkompilasi sesuai kode standar ISO tanpa hambatan. Berikut detailnya: untuk C , untuk C ++ .Saya pikir dentang bisa menjadi alternatif.
GCC dan dentang memiliki beberapa perbedaan pada ekspresi seperti
a+++++a
, dan saya punya banyak jawaban berbeda dengan rekan saya yang menggunakan dentang di Mac sementara saya menggunakan gcc.GCC telah menjadi standar, dan dentang bisa menjadi alternatif. Karena GCC sangat stabil dan dentang masih dalam pengembangan.
sumber
a+++++a
harus gagal, karena diuraikan sebagaia ++ ++ + a
kesalahan sintaks.