Yanıtlar:
gcc çok olgun, kurulumu kolaydır (en azından çoğu sistem için) ve birçok sistem için varsayılan derleyicidir, bu nedenle birçok durumda insanlar farkında olmadan neredeyse yüklemiştir. Bir milyon mimariye taşındı, bu yüzden belirsiz donanımı hedeflemeniz gerekiyorsa kutudan çıkması çok daha muhtemel.
clang çok daha yeni. Özellikle C ++ şablonları için çok daha iyi hata mesajları üretir. Çoğu durumda, çok daha hızlı çalışır. Öncelikle bir kütüphane seti olarak inşa edilmiştir, bu nedenle aynı ön ucu kullanan, aynı girişleri anlayan vb.Gibi birkaç başka proje (örn. Kod analizörleri) vardır. ondan nasıl kod ürettiğiniz.
Clang'ın hata raporlaması çok daha iyi. Örneğin, aradığınız işlev adında bir yazım hatası yaparsanız, Clang bunun muhtemelen bir yazım hatası olduğunu bildirir (ve doğru adı önerir), GCC ise bilinmeyen işlev adından şikayet eder.
X86 / x86-64'ü hedeflerseniz GCC genellikle daha hızlı kod üretir. ARM için durum belirsizdir, genellikle Clang daha iyi optimize eder. Ayrıca, AFAIK Clang kod boyutu için optimizasyonu desteklemez.
GCC çok fazla buluşsal yöntem kullanır. Bu, performans için iyidir (tipik bir durumda), ancak bazı kaynak düzeyinde optimizasyon yapmak istiyorsanız (ör. Döngü açma) korkunç. Küçük kaynak kodu değişiklikleri bile GCC'yi tamamen farklı bir çıktı oluşturabilir. Clang daha tahmin edilebilir ve genellikle beklediğiniz kodu üretir.
Jerry Coffin'den farklı olarak, GCC'yi kaynaktan Clang'dan çok daha zor buluyorum. Clang'ın Başlangıç sayfasındaki prosedür her zaman benim için çalıştı. GCC için benzer kılavuz ilk denemede hiç çalışmadı. GCC'nin GMP, MPFR, MPC, Parma Polyhedra Kütüphanesi ve CLooG'nin belirli sürümlerine bağımlılıkları vardır ve belirli bir GCC sürümü için çalışacak sürümleri bulmak için birkaç yinelemeye ihtiyacım vardı (evet, bu kütüphanelerin son sürümlerini kullanmak işe yaramıyor ).
Clang'ın GCC'den daha iyi test edildiğini hissediyorum. Sadece GCC'nin resmi sürümlerini kullanmama rağmen, bazen hatalı kod üretti. Clang için genellikle gövde versiyonunu kullanıyorum (tekrar, çünkü inşa edilmesi kolay), ama asla yanlış çıktı ürettiğini görmedim.
GCC, Linux dünyasında neredeyse standarttır ve Linux yazılımlarında yaygın olarak kullanılan birçok standart dışı özellik ekler. Clang, GCC ile uyumlu olmaya çalışır, ancak bazen onları sessizce göz ardı eder. En önemlisi, Clang OpenMP'yi desteklemiyor. Bununla birlikte, GCC tarafından desteklenmeyen, ancak yararlı olabilecek uzantılara da sahiptir (örneğin, taşıma ile ekleme iç işlevleri __buildin_addc).
Derleyici araştırması yapmak veya sadece nasıl çalıştığını merak etmek istiyorsanız, Clang / LLVM kaynak kodunu daha erişilebilir bulacaksınız. Clang / LLVM kodu sadece derleyici tarafından okunabilir değil, insan tarafından okunabilir.
(AINAL beyanı geçerlidir) Clang / LLVM lisansı, kodla neler yapabileceğiniz konusunda daha fazla özgürlük sağlar, örneğin ticari veya kapalı kaynaklı ürünlerde kullanım. GCC çalışma zamanı kitaplıkları lisansı, Clang derleyici çalışma zamanı (compiler-rt kitaplığı) izin verilen MIT lisansı altındayken başka bir kısıtlama katmanı ekler.
Özet: programı geliştirirken Clang ile ve son derleme için GCC ile derleyin (ancak daha hızlı ve kırılmadığından emin olun). Derleyici araştırması yaparsanız Clang / LLVM ile devam edin.
__builtin_add
, değil __buildin_addc
. Her neyse, Clang addc
taşıma olarak karşılaştırmayı kullanarak geniş bir eklenti ile karşılaştığında üretmek için yeterince akıllı
__builtin_addc
değil__buildin_addc
Yeni bir CPU mimariniz veya yeni optimizasyonlarınız varsa ve bunları GPL altında açmak istiyorsanız, gcc'ye katkıda bulunabilirsiniz. Bununla birlikte, gcc daha az modülerdir, bu nedenle kişinin modifikasyonlarını / eklemelerini eklemek için daha fazla çalışma gerekebilir. Açık kaynaklı bir projeye yeni mimarilere veya optimizasyonlara katkıda bulunmak istiyorsanız, ancak GPL olmayan bir lisans altında, bunları LLVM / clang'a katkıda bulunabilirsiniz. Hukuk departmanları sadece ikincisine izin veren şirketler var.
Bugün (8/11/2011), GCC, Clang'dan çok daha fazla C ++ 0x özelliğini desteklemektedir. Bu özellikleri istiyorsanız, beyinsizdir; GCC sizin seçiminizdir.