GCC (GNU Derleyici Toplama), GNU / Linux ve BSD tabanlı işletim sistemleri için bir derleyici olarak davranmak üzere tasarlanmış açık kaynaklı bir komut satırı yazılımıdır. Objective-C, Go, C ++, Java, C, Ada ve Fortran gibi birçok programlama dilinin ön uçlarını içerir.
Bir bakışta özellikler
GCC ile Linux veya BSD işletim sistemlerinde GNU / Linux uygulamalarını sadece ilgili programın kaynak arşivini kullanarak yapılandırabilir, derleyebilir ve kurabilirsiniz. Ancak, kullanıcılar derleyici ile etkileşime girme gereği duymazlar; çünkü bu, yapılandırma tarafından otomatik olarak yapılır ve komut dosyaları yapar.
Proje ayrıca, libstdc ve libgcj gibi çeşitli programlama dilleri için kütüphaneler içerir ve çoğu GNU yazılımı gibi, bilgisayarınıza kurulabilmesi ve yüklenebilmesinden önce yapılandırılması gerekir.
Ayrıca, belirli bir kitaplığın tam yolunu, derleyicinin arama yolundaki klasörleri, belirli bir bileşenin tam yolunu, hedef kitaplık dizinini, üstbilgileri bulmak için kullanılan sysroot sonekini ve hedefin normalleştirilmiş GNU üçlüsünü de görüntüleyebilir.
Ayrıca, bazı virgülle ayrılmış seçenekleri ve argümanları assembler, preprocessor ve linker'a aktarma, derleme olmadan derleme ve birleştirme, paylaşılan bir kütüphane oluşturma ve daha birçok başka seçenek vardır.
GNU işletim sistemi için tasarlandı
İlk olarak GNU işletim sistemi için ana derleyici olarak yazılan GCC (GNU Compiler Collection),% 100 ücretsiz yazılım olarak geliştirildi ve herhangi bir Linux dağıtımında varsayılan olarak kuruldu.
Yazılım, programlarını derlemek için Açık Kaynak geliştiricileri tarafından da kullanılır. Komut satırı, derleyici & rsquo; s hedef işlemcisinin yanı sıra OS kitaplıklarının göreceli yolunu gösterebilme yeteneğinden bahsedebileceğimiz çeşitli seçeneklerle birlikte gelir.
Alt çizgi
Sonuç olarak, GCC, herhangi bir GNU / Linux işletim sisteminin en önemli bileşenlerinden biridir. Sadece onsuz bir dünya hayal bile edemeyiz, aynı zamanda GCC, tüm Açık Kaynak ekosisteminin ardındaki temel nedendir.
Bu sürümde yeni olan :
p>
- GCC 7.3, GCC 7 şubesinden, GCC 7.2'deki regresyonlar ve ciddi hatalar için önemli düzeltmeler içeren, bir önceki sürümden bu yana düzeltilen 99'dan fazla hata içeren bir hata düzeltmesi sürümüdür.
- Bu sürüm, x86 ve powerpc hedefleri için Spectre Varyant 2'yi (CVE 2017-5715) azaltmak için kod oluşturma seçenekleri içerir.
Sürüm 8.1.0’da yeni :
- GCC 7.3’den hata düzeltmesi GCC 7 şubesi, GCC 7.2'deki regresyonlar ve ciddi hatalar için önemli düzeltmeler içeren bir önceki sürümden bu yana düzeltilen 99'dan fazla hata ile birlikte.
- Bu sürüm, x86 ve powerpc hedefleri için Spectre Varyant 2'yi (CVE 2017-5715) azaltmak için kod oluşturma seçenekleri içerir.
Sürümde yeni: :
- GCC 7.1, GCC 6.x veya önceki GCC sürümlerinde bulunmayan önemli yeni işlevler içeren büyük bir sürümdür. C ++ ön ucunun şimdiki C ++ 17 taslağı için -std = c ++ 1z ve -std = gnu ++ 1z seçenekleriyle deneysel desteği vardır ve libstdc ++ kütüphanesi C ++ 17 taslağının çoğuna sahiptir. kütüphane özellikleri de uygulandı. Bu sürümler, geliştirilmiş konumlar, konum aralıkları, yanlış yazılan tanımlayıcılar için öneriler, seçenek adları, düzeltme ipuçları ve çeşitli yeni uyarılar dahil olmak üzere yayılan tanılamalarda çeşitli geliştirmeler içeriyor. Optimize ediciler iyileştirildi, tüm süreç içi ve prosedürler arası optimizasyonlar, bağlantı zaman optimizasyonları ve çeşitli hedef arka planlar, bunlarla sınırlı olmamak kaydıyla, mağaza birleştirme geçişi, kod kaldırma optimizasyonu, döngü bölme ve küçültme dahil olmak üzere iyileştirmeler yapıldı. iyileştirmeler. Adres Temizleyici, artık kapsamlarını terk ettikten sonra değişkenlerin kullanımını bildirebilir. GCC artık NVIDIA PTX GPGPU'lara OpenMP 4.5 boşaltma için yapılandırılabilir.
<6>
- GCC 6.3, GCC 6 şubesinden, GCC 6.2'deki regresyonlar ve ciddi hatalar için önemli düzeltmeler içeren, bir önceki sürümden bu yana giderilen 79'dan fazla hata içeren bir hata düzeltmesi sürümüdür.
Sürüm 6.2.0’da yeni: :
- Bu sürüm, GCC'nin önceki sürümlerine göre GCC 5.2'deki düzeltmeler için düzeltmeler içeren bir hata düzeltmesi sürümüdür.
6.1.0 sürümünde yeni :
- Bu sürüm, GCC'nin önceki sürümlerine göre GCC 5.2'deki düzeltmeler için düzeltmeler içeren bir hata düzeltmesi sürümüdür.
5.3.0 sürümündeki yeni :
- Bu sürüm, GCC'nin önceki sürümlerine göre GCC 5.2'deki düzeltmeler için düzeltmeler içeren bir hata düzeltmesi sürümüdür.
Sürüm 5.2.0’da yeni: :
- Bu sürüm, GCC'nin önceki GCC sürümlerine göre GCC 5.1'deki düzeltmeler için düzeltmeler içeren bir hata düzeltmesi sürümüdür.
Sürüm 5.1.0’da yeni: :
- C ++ ön uçunun artık tam C ++ 14 dil desteği var ve Standart C ++ Kütüphanesi tam C ++ 11 desteğine ve deneysel C ++ 14 desteğine sahip. İkili ABI benimsenerek tam C ++ 11 desteği sağlandı, daha fazla bilgi için https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html adresini ziyaret edin.
- C ön uç, varsayılan olarak, satır içi anahtar kelimenin anlamlarını etkileyen ve diğer bazı kullanıcı tarafından görülebilen değişiklikleri getiren GNU uzantıları olan C11 moduna geçer. Bkz. https://gcc.gnu.org/gcc-5/porting_to.html daha fazla bilgi için.
- GCC 5.1, çeşitli prosedüre göre optimizasyon geliştirmeleri içerir, örn. yeni bir IPA Özdeş Kod Katlama geçişi ve çeşitli LTO iyileştirmeleri, ör. ODR temelli C ++ türlerini birleştirme, daha fazla bilgi için http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html adresini ziyaret edin.
- GCC 5.1 Local Register Allocator artık bir at 86 / x86-64 pozisyonun bağımsız kodunun performansını iyileştirmek için PIC hard registerını yeniden kullanabileceği bir rematerializasyon alt geçidi içeriyor, basit bir ara işlemli RA geçişi ve çeşitli başka kayıtlar var tahsis iyileştirmeleri eklendi.
- GCC 5.1, OpenACC standardı için kısmi destek, Intel'in yaklaşan Xeon Phi hızlandırıcılarına OpenMP 4.0 boşaltma desteği ve PTX'e OpenACC boşaltma desteğini ekler. GCC'deki Tanımlanmamış Davranış Temizleyici, çeşitli yeni çalışma zamanı kontrolleri ekleyerek genişletildi. GCC 5.1'e bir deneysel GCC JIT kitaplığı eklendi.
Sürüm 4.8.4’de yeni: :
- Genel Doktor İyileştirmeleri:
- Hızlı bir bellek hatası algılayıcısı olan AddressSanitizer artık ARM'de kullanılabilir.
- UndefinedBehaviorSanitizer (ubsan) eklenmiştir ve -fsanitize = undefined yoluyla etkinleştirilebilir. Çalışma zamanında tanımlanmamış davranışları tespit etmek için çeşitli hesaplamalar yapılacaktır. UndefinedBehaviorSanitizer şu anda C ve C ++ dilleri için kullanılabilir.
- Bağlantı zamanı optimizasyonu (LTO) iyileştirmeleri:
- Birleştirme türü yeniden yazıldı. Yeni uygulama çok daha hızlı ve daha az bellek kullanıyor.
- Bağlantı süresi boyunca daha az akışla sonuçlanan daha iyi bölümleme algoritması.
- Sanal yöntemlerin erken kaldırılması, nesne dosyalarının boyutunu azaltır ve bağlantı zamanı bellek kullanımını geliştirir ve zamanı derler.
- İşlev gövdeleri artık isteğe bağlı olarak yüklenir ve bağlantı zamanında genel bellek kullanımını iyileştirmeye başlar.
- C ++ gizli anahtarlı yöntemler artık optimize edilebilir.
- Bir linker eklentisi kullanıldığında, -flto seçeneği ile derleme artık sadece LTO için ara dil temsili içeren ince nesne dosyalarını (.o) üretir. Ek olarak nesne kodunu içeren dosyaları oluşturmak için -ffat-lto-nesneleri kullanın. LTO işleme için uygun statik kütüphaneler üretmek için gcc-ar ve gcc-ranlib kullanın; ince bir nesne dosyasındaki sembolleri listelemek için gcc-nm'yi kullanın. (Bu, ranlib ve nm'nin eklenti desteğiyle derlenmiş olmasını gerektirir.)
- Bellek kullanım binası Hata ayıklama etkinleştirilmiş Firefox 15 GB'den 3,5GB'a düşürüldü; bağlantı süresi 1700 saniyeden 350 saniyeye kadar.
- İşlemler arası optimizasyon iyileştirmeleri:
- Devirtualizasyonu iyileştiren yeni tip kalıtım analizi modülü. Devirtualization artık anonim ad boşluklarını ve C ++ 11 final anahtar kelimelerini hesaba katar.
- Yeni spekülatif devirtualizasyon geçişi (-fdevirtualize-speculatively tarafından kontrol edilir.
- Spesifik olarak doğrudan yapılan çağrılar, doğrudan aramanın daha ucuz olmadığı durumlarda, dolaylı olarak geri çevrilir.
- Paylaşılan kitaplıklar arasında dinamik bağlantı sürelerini iyileştiren semantik olarak eşdeğer olduğu bilinen semboller için yerel takma adlar tanıtılır.
- Geri bildirime yönelik optimizasyon iyileştirmeleri:
- C ++ satır içi işlevlerini kullanan programların profili artık daha güvenilir.
- Yeni zaman profili, işlevlerin yürütüldüğü tipik sırayı belirler.
- Yeni bir işlev yeniden sıralama geçişi (-freorder-functions tarafından kontrol edilir) büyük uygulamaların başlatma süresini önemli ölçüde azaltır. Binutils desteği tamamlanana kadar, yalnızca bağlantı zamanı optimizasyonu ile etkilidir.
- Geri besleme kaynaklı dolaylı çağrı kaldırma ve devirtualization artık bağlantı zamanı optimizasyonu etkinleştirildiğinde çapraz modül çağrılarını yürütüyor.
- Yeni Diller ve dile özel iyileştirmeler:
- OpenMP spesifikasyonunun 4.0 versiyonu artık C ve C ++ derleyicilerinde destekleniyor ve Fortran derleyicisinde de 4.9.1 sürümü ile başlıyor. Yeni -fopenmp-simd seçeneği, diğer OpenMP yönergelerini göz ardı ederken, OpenMP'nin SIMD yönergelerini etkinleştirmek için kullanılabilir. Yeni -fsimd-cost-model = opsiyonu, OpenMP ve Cilk Plus simd direktifleri ile açıklamalı döngüler için vektörizasyon maliyet modelini ayarlamasına izin verir; -Wopenmp-simd, mevcut maliyet modeli kullanıcı tarafından ayarlanan simd yönergelerini geçersiz kıldığında uyarır.
- __DATE__, __TIME__ veya __TIMESTAMP__ makroları kullanıldığında uyarılan C, C ++ ve Fortran derleyicileri için -Wdate-time seçeneği eklendi. Bu makrolar, bit eşdeğer tekrarlanabilir derlemeleri önleyebilir.
- Ada:
- GNAT varsayılan olarak Ada 2005 yerine Ada 2012'ye geçti.
- C ailesi:
- GCC tarafından yayınlanan renklendirme tanılama desteği eklendi. -Fdiagnostics-color = auto, terminallere çıktığında etkinleştirir, -fdiagnostics-color = her zaman koşulsuz olarak. Renkleri özelleştirmek veya renklendirmeyi devre dışı bırakmak için GCC_COLORS ortam değişkeni kullanılabilir. Ortamda GCC_COLORS değişkeni varsa, varsayılan değer -fdiagnostics-color = auto, aksi halde -fdiagnostics-color = asla. .
- Örnek teşhis çıkışı:
- $ g ++ -fdiagnostics-color = her zaman -S -Wall testi.C
- test.C: İşlevde & lsquo; int foo () ':
- test.C: 1: 14: uyarı: void olmayan [dönüş tipi] işlevinde dönüş ifadesi yok
- int foo () {}
- test.C: 2: 46: hata: şablon somutlama derinliği en fazla 900'ü aşıyor (maksimum değeri artırmak için -ftemplate-depth = = =))
- şablon yapısı X {statik const int değeri = X :: değeri; }; şablon yapısı X;
- test.C: 2: 46: & lsquo; const int X :: value 'öğesinden yinelemeli gerekli
- test.C: 2: 46: & lsquo; const int'den gerekli X :: value '
- test.C: 2: 88: buradan gerekli
- test.C: 2: 46: hata: tamamlanmamış tür & lsquo; X 'iç içe ad belirtecinde kullanılan
- Yeni #pragma GCC ivdep ile kullanıcı, SIMD (tek komut çoklu veri) komutlarını kullanarak ardışık yinelemelerin eşzamanlı yürütülmesini önleyecek döngüde taşınan bağımlılıklar olmadığını iddia edebilir.
- Cilk Plus desteği eklenmiştir ve -fcilkplus seçeneği ile etkinleştirilebilir. Cilk Plus, veri ve görev paralelliğini desteklemek için C ve C ++ dillerinin bir uzantısıdır. Mevcut uygulama ABI versiyon 1.2'yi takip etmektedir; tüm özellikler ancak _Cilk_for uygulandı.
- ISO C11 atomikleri (_Atomic type belirleyici ve niteleyici ve başlık) artık destekleniyor.
- ISO C11 genel seçimleri (_Generik anahtar kelime) artık destekleniyor.
- ISO C11 iş parçacığı yerel depolama (_Thread_local, GNU C __thread'e benzer) artık desteklenmektedir.
- ISO C11 desteği şu anda ISO C99 desteğine benzer bir düzeyde tamamlanmıştır: büyük ölçüde tam modulo hataları, genişletilmiş tanımlayıcılar (genişletilmiş tanımlayıcılar kullanıldığında köşe durumları hariç desteklenir), kayan nokta sorunları (çoğunlukla fakat tamamen değil) Ekler F ve G) ve isteğe bağlı Ek K (Sınır kontrol kontrol arayüzleri) ve L (Analiz edilebilirlik) opsiyonel C99 özelliklerine ilişkin.
- Yeni bir C uzantısı __auto_type, GNU C'de C ++ 11 otomatik işlevinin bir alt kümesini sağlar.
- C ++:
- Normal işlevler için C ++ 1y dönüş türü kesintisinin G ++ uygulaması, çalışma kağıdına kabul edilen teklif olan N3638'e uygun olarak güncellendi. En önemlisi, o, düz auto şablon argüman kesinti semantiği yerine decltype semantik almak için decltype (auto) ekler:
- int & Sons; f ()
- otomatik i1 = f (); // int
- decltype (otomatik) i2 = f (); // int & amp;
- G ++, C ++ 1y lambda yakalama başlatıcılarını destekler:
- [x = 42] {...};
- Aslında, GCC 4.5'ten beri kabul edilmişler, ancak derleyici, -std = c ++ 1y ile ilgili olarak uyarmaz ve parantezize edilmiş ve ayraçlı başlatıcıları da destekler.
- G ++, C ++ 1y değişken uzunluklu dizileri destekler. G ++, uzun bir süre GNU / C99 tarzı VLA'ları destekledi, ancak şimdi ek olarak başlatıcıları ve referansla lambda yakalamayı destekliyor. C ++ 1y modunda G ++, VLA türüne bir işaretçi oluşturmak veya bir VLA değişkenine boyut uygulamak gibi taslak standart tarafından izin verilmeyen VLA kullanımlarından şikayet edecektir. Artık VLA'ların C ++ 14'ün parçası olmayacağını, ancak ayrı bir belgenin parçası olacağını ve belki de C ++ 17'nin olacağını unutmayın.
- void f (int n) {
- int a [n] = {1, 2, 3}; // std :: bad_array_length öğesinin n & lt; 3.
- [& amp; a] {for (int i: a) {cout için
Hızlı tanımlanmamış bir davranış dedektörü olan
Sürüm 4.9.1’de yeni: :
- GCC 4.9.1, GCC 4.9.0'daki regresyonlar ve ciddi hatalar için önemli düzeltmeleri içeren ve önceki sürümden bu yana düzeltilen 88'den fazla hata içeren GCC 4.9 şubesinden bir hata düzeltme sürümüdür. Buna ek olarak, GCC 4.9.1 sürümü, C ve C ++ 'da değil, Fortran'da da OpenMP 4.0'ı desteklemektedir.
Sürüm 4.9.0’da yeni: :
- Genel Doktor İyileştirmeleri:
- Hızlı bir bellek hatası algılayıcısı olan AddressSanitizer artık ARM'de kullanılabilir.
- UndefinedBehaviorSanitizer (ubsan) eklenmiştir ve -fsanitize = undefined yoluyla etkinleştirilebilir. Çalışma zamanında tanımlanmamış davranışları tespit etmek için çeşitli hesaplamalar yapılacaktır. UndefinedBehaviorSanitizer şu anda C ve C ++ dilleri için kullanılabilir.
- Bağlantı zamanı optimizasyonu (LTO) iyileştirmeleri:
- Birleştirme türü yeniden yazıldı. Yeni uygulama çok daha hızlı ve daha az bellek kullanıyor.
- Bağlantı süresi boyunca daha az akışla sonuçlanan daha iyi bölümleme algoritması.
- Sanal yöntemlerin erken kaldırılması, nesne dosyalarının boyutunu azaltır ve bağlantı zamanı bellek kullanımını geliştirir ve zamanı derler.
- İşlev gövdeleri artık isteğe bağlı olarak yüklenir ve bağlantı zamanında genel bellek kullanımını iyileştirmeye başlar.
- C ++ gizli anahtarlı yöntemler artık optimize edilebilir.
- Bir linker eklentisi kullanıldığında, -flto seçeneği ile derleme artık sadece LTO için ara dil temsili içeren ince nesneler dosyaları (.o) üretir. Ek olarak nesne kodunu içeren dosyaları oluşturmak için -ffat-lto-nesneleri kullanın. LTO işleme için uygun statik kütüphaneler üretmek için gcc-ar ve gcc-ranlib kullanın; ince bir nesne dosyasındaki sembolleri listelemek için gcc-nm'yi kullanın. (Ar, ranlib ve nm'nin eklenti desteğiyle derlenmiş olmasını gerektirir.)
- Bellek kullanım binası Hata ayıklama etkinleştirilmiş Firefox 15 GB'den 3,5GB'a düşürüldü; bağlantı süresi 1700 saniyeden 350 saniyeye kadar.
- İşlemler arası optimizasyon iyileştirmeleri:
- Devirtualizasyonu iyileştiren yeni tip kalıtım analizi modülü. Devirtualization artık anonim ad boşluklarını ve C ++ 11 final anahtar kelimelerini hesaba katar.
- Yeni spekülatif devirtualizasyon geçişi (-fdevirtualize-speculatively tarafından kontrol edilir.
- Spesifik olarak doğrudan yapılan çağrılar, doğrudan aramanın daha ucuz olmadığı durumlarda, dolaylı olarak geri çevrilir.
- Paylaşılan kitaplıklar arasında dinamik bağlantı sürelerini iyileştiren semantik olarak eşdeğer olduğu bilinen semboller için yerel takma adlar tanıtılır.
- Geri bildirime yönelik optimizasyon iyileştirmeleri:
- C ++ satır içi işlevlerini kullanan programların profili artık daha güvenilir.
- Yeni zaman profili, işlevlerin yürütüldüğü tipik sırayı belirler.
- Yeni bir işlev yeniden sıralama geçişi (-freorder-functions tarafından kontrol edilir) büyük uygulamaların başlatma süresini önemli ölçüde azaltır. Binutils desteği tamamlanana kadar, yalnızca bağlantı zamanı optimizasyonu ile etkilidir.
- Geri besleme kaynaklı dolaylı çağrı kaldırma ve devirtualization artık bağlantı zamanı optimizasyonu etkinleştirildiğinde çapraz modül çağrılarını yürütüyor.
- Yeni Diller ve dile özel iyileştirmeler:
- OpenMP belirtiminin 4.0 sürümü şimdi C ve C ++ derleyicileri için desteklenmektedir. Yeni -fopenmp-simd seçeneği, diğer OpenMP yönergelerini göz ardı ederken, OpenMP'nin SIMD yönergelerini etkinleştirmek için kullanılabilir. Yeni -fsimd-cost-model = opsiyonu, OpenMP ve Cilk Plus simd direktifleri ile açıklamalı döngüler için vektörizasyon maliyet modelini ayarlamasına izin verir; -Wopenmp-simd, mevcut costmodel kullanıcı tarafından ayarlanan simd direktiflerini geçersiz kıldığında uyarır.
- __DATE__, __TIME__ veya __TIMESTAMP__ makroları kullanıldığında uyarılan C, C ++ ve Fortran derleyicileri için -Wdate-time seçeneği eklendi. Bu makrolar, bit eşdeğer tekrarlanabilir derlemeleri önleyebilir.
- Ada:
- GNAT varsayılan olarak Ada 2005 yerine Ada 2012'ye geçti.
- C ailesi:
- GCC tarafından yayınlanan renklendirme tanılama desteği eklendi. -Fdiagnostics-color = auto, terminallere çıktığında etkinleştirir, -fdiagnostics-color = her zaman koşulsuz olarak. Renkleri özelleştirmek veya renklendirmeyi devre dışı bırakmak için GCC_COLORS ortam değişkeni kullanılabilir. Ortamda GCC_COLORS değişkeni varsa, varsayılan değer -fdiagnostics-color = auto, aksi halde -fdiagnostics-color = asla. .
- Örnek teşhis çıkışı:
- $ g ++ -fdiagnostics-color = her zaman -S -Wall testi.C
- test.C: İşlevde & lsquo; int foo () ':
- test.C: 1: 14: uyarı: void olmayan [dönüş tipi] işlevinde dönüş ifadesi yok
- int foo () {}
- test.C: 2: 46: hata: şablon somutlama derinliği en fazla 900'ü aşıyor (maksimum değeri artırmak için -ftemplate-depth = = =))
- şablon yapısı X {statik const int değeri = X :: değeri; }; şablon yapısı X;
- test.C: 2: 46: & lsquo; const int X :: value 'öğesinden yinelemeli gerekli
- test.C: 2: 46: & lsquo; const int'den gerekli X :: value '
- test.C: 2: 88: buradan gerekli
- test.C: 2: 46: hata: tamamlanmamış tür & lsquo; X 'iç içe ad belirtecinde kullanılan
- Yeni #pragma GCC ivdep ile kullanıcı, SIMD (tek komut çoklu veri) komutlarını kullanarak ardışık yinelemelerin eşzamanlı yürütülmesini önleyecek döngüde taşınan bağımlılıklar olmadığını iddia edebilir.
- Cilk Plus desteği eklenmiştir ve -fcilkplus seçeneği ile etkinleştirilebilir. Cilk Plus, veri ve görev paralelliğini desteklemek için C ve C ++ dillerinin bir uzantısıdır. Mevcut uygulama ABI versiyon 1.2'yi takip etmektedir; tüm özellikler ancak _Cilk_for uygulandı.
- ISO C11 atomikleri (_Atomic type belirleyici ve niteleyici ve başlık) artık destekleniyor.
- ISO C11 genel seçimleri (_Generik anahtar kelime) artık destekleniyor.
- ISO C11 iş parçacığı yerel depolama (_Thread_local, GNU C __thread'e benzer) artık desteklenmektedir.
- ISO C11 desteği şu anda ISO C99 desteğine benzer bir düzeyde tamamlanmıştır: büyük ölçüde tam modulo hataları, genişletilmiş tanımlayıcılar (genişletilmiş tanımlayıcılar kullanıldığında köşe durumları hariç desteklenir), kayan nokta sorunları (çoğunlukla fakat tamamen değil) Ekler F ve G) ve isteğe bağlı Ek K (Sınır kontrol kontrol arayüzleri) ve L (Analiz edilebilirlik) opsiyonel C99 özelliklerine ilişkin.
- Yeni bir C uzantısı __auto_type, GNU C'de C ++ 11 otomatik işlevinin bir alt kümesini sağlar.
- C ++:
- Normal işlevler için C ++ 1y dönüş türü kesintisinin G ++ uygulaması, çalışma kağıdına kabul edilen teklif olan N3638'e uygun olarak güncellendi. En önemlisi, o, düz auto şablon argüman kesinti semantiği yerine decltype semantik almak için decltype (auto) ekler:
- int & Sons; f ()
- otomatik i1 = f (); // int
- decltype (otomatik) i2 = f (); // int & amp;
- G ++, C ++ 1y lambda yakalama başlatıcılarını destekler:
- [x = 42] {...};
- Aslında, GCC 4.5'ten beri kabul edilmişler, ancak derleyici, -std = c ++ 1y ile ilgili olarak uyarmaz ve parantezize edilmiş ve ayraçlı başlatıcıları da destekler.
- G ++, C ++ 1y değişken uzunluklu dizileri destekler. G ++, uzun bir süre GNU / C99 tarzı VLA'ları destekledi, ancak şimdi ek olarak başlatıcıları ve referansla lambda yakalamayı destekliyor. C ++ 1y modunda G ++, VLA türüne bir işaretçi oluşturmak veya bir VLA değişkenine boyut uygulamak gibi taslak standart tarafından izin verilmeyen VLA kullanımlarından şikayet edecektir. Artık VLA'ların C ++ 14'ün parçası olmayacağını, ancak ayrı bir belgenin parçası olacağını ve belki de C ++ 17'nin olacağını unutmayın.
- void f (int n) {
- int a [n] = {1, 2, 3}; // std :: bad_array_length öğesinin n & lt; 3.
- [& amp; a] {for (int i: a) {cout için
Hızlı tanımlanmamış bir davranış dedektörü olan
1 Yorumlar
http://www.eduwizzonlinetrainings.com 29 Dec 17
EduwizzOnlineTraining is one of the Best Online Training Institute in Hyderabad, Bangalore. Eduwizz provide courses like Hybris Development, WebSphere Commerce Server,Blockchain Training,Hyperledger Fabric Development ,Ethereum Development ,Commvault Training, Devops , Netapps , Mulesoft ESB ,Machine Learning,Data Science , Internet of Things , Hybris ,Angular JS , Node JS , Express JS , Business Analyst, Selenium testing with webdriver, Guidewire ,Adobe, RPA ,TSM, EMC...etc