A
GCC (GNU Compiler Collection) egy nyílt forráskódú parancssori szoftver, mely a GNU / Linux és a BSD alapú operációs rendszerek fordítójaként működik. Ez magában foglalja az elülső felületeket számos programozási nyelv számára, beleértve a Célkitűzést, a Go, a C ++, a Java, a C, az Ada és a Fortran programokat.
Jellemzők áttekintése
Az GCC segítségével konfigurálhatja, fordíthatja és telepítheti a GNU / Linux alkalmazást Linux vagy BSD operációs rendszerekben, csak az adott program forrásarchívuma segítségével. A felhasználóknak azonban nem kell kapcsolódniuk a fordítóhoz, mivel ezt a konfigurálás automatikusan végzi el, és szkripteket készítenek.
A projekt tartalmaz különböző könyvtárakat különböző programozási nyelvekhez, például a libstdc és a libgcj könyvtárhoz, és hasonlóan a legtöbb GNU szoftverhez is, mielőtt a számítógépre építhető és telepíthető.
Megjelenítheti a teljes elérési utat is egy adott könyvtárhoz, a fordító keresési útvonalához tartozó mappákhoz, egy adott összetevő teljes elérési útjához, a célkönyvtárak könyvtárához, a fejlécek találásához használt szirédui utótaghoz és a célzott normalizált GNU triplethez.
Emellett számos más lehetőség is van bizonyos vesszővel elválasztott opciók és érvek átadására az összeszerelőhöz, előfeldolgozóhoz és linkerhez, fordítása és összeszerelése összekapcsolása nélkül, megosztott könyvtár létrehozása és még sok más.
A GNU operációs rendszerhez készült
Mivel eredetileg a GNU operációs rendszer fő fordítójaként lettek írva, az GCC (GNU Compiler Collection) 100% -os szabad szoftver lett kifejlesztve, és alapértelmezés szerint telepítve van bármely Linux disztribúcióra.
A szoftvereket a nyílt forráskódú fejlesztők is használják programjaik összeállításához. A parancssor számos opcióval rendelkezik, amelyek közül megemlíthetjük a fordító célfeldolgozójának megjelenítési képességét, valamint az OS könyvtárak relatív elérési útját.
Alsó sor
Összességében az GCC egy GNU / Linux operációs rendszer egyik legfontosabb összetevője. Nem csak azt tudjuk képzelni, hogy egy világot nélkülözhetnénk, de az Open Source ökoszisztéma legfőbb oka az
Újdonság ebben a kiadásban:
- Az GCC 7.3 egy hibakezelő kiadás az GCC 7 ágból, amely fontos javításokat tartalmaz a regresszióhoz és súlyos hibákhoz az GCC 7.2-ben, és több mint 99 hibát tartalmaz előző kiadása óta.
- Ez a kiadás kódfejlesztési lehetőségeket tartalmaz a 2. Spectre Variant (CVE 2017-5715) enyhítésére az x86 és a powerpc célokra.
Az újdonság a 8.1.0-es verzióban:
- Az GCC 7.3 egy hibajavító kiadás a GCC 7 ág, amely fontos korrekciókat tartalmaz a regresszióhoz és a súlyos hibákhoz a GCC 7.2-ben, több mint 99 hibával javítva az előző kiadás óta.
- Ez a kiadás kódfejlesztési lehetőségeket tartalmaz a 2. Spectre Variant (CVE 2017-5715) enyhítésére az x86 és a powerpc célokra.
Újdonság a verzióban:
- Az GCC 7.1 egy jelentős kiadás, amely lényeges új funkciókat tartalmaz, amelyek nem állnak rendelkezésre a GCC 6.x vagy a korábbi GCC kiadásokban. A C + + frontend most kísérleti támogatást nyújt az aktuális C ++ 17 tervezethez, az -std = c ++ 1z és az -std = gnu ++ 1z opciókkal, és a libstdc ++ könyvtárban a legtöbb C ++ 17 tervezet könyvtár funkciók is megvalósultak. Ez a kibocsátás számos kibővített javítást tartalmaz a kibocsájtott diagnosztikában, beleértve a javított helyeket, a helyszíneket, a hibás azonosítójú javaslatokat, az opcióneveket, a javítások és különböző új figyelmeztetések felvételét. Az optimalizátorok javultak, javítások történtek az összes intra- és inter-procedurális optimalizálásban, a kapcsolódási idő optimalizálásában és a különböző cél-backendekben, többek között, de nem kizárólagosan, a tárolási egyesülési átvitel, a kódemelés optimalizálás, a hurokhasadás és a zsugorodás csomagolási javításokat. A Cím Sanitizer a változók használatát jelentheti a hatókörük elhagyása után. Az GCC most már beállítható az OpenMP 4.5 letöltéshez az NVidia PTX GPGPU-k számára.
Az újdonság a 6.3.0 verzióban:
- Az GCC 6.3 egy hibajavító kiadás az GCC 6 ágból, amely fontos javításokat tartalmaz a regresszióhoz és a súlyos hibákhoz a GCC 6.2-ben, és az előző kiadás óta rögzített több mint 79 hibát tartalmaz.
Az újdonság a 6.2.0 verzióban:
- Ez a kiadás egy hibajavító kiadás, amely tartalmazza az GCC 5.2 korábbi regisztrálására vonatkozó korrekciókat a GCC 5.2-ben.
Az újdonság a 6.1.0 verzióban:
- Ez a kiadás egy hibajavító kiadás, amely tartalmazza az GCC 5.2 korábbi regisztrálására vonatkozó korrekciókat a GCC 5.2-ben.
Az újdonság az 5.3.0 verzióban:
- Ez a kiadás egy hibajavító kiadás, amely tartalmazza az GCC 5.2 korábbi regisztrálására vonatkozó korrekciókat a GCC 5.2-ben.
Az újdonság az 5.2.0 verzióban:
- Ez a kibocsátás egy hibajavító kiadás, amely tartalmazza az GCC 5.1 korábbi regisztrálására vonatkozó regresszióinak javításait.
Az újdonság az 5.1.0 verzióban:
- A C ++ előlapja teljes C ++ 14 nyelvtámogatással rendelkezik, és a Standard C ++ könyvtár teljes C ++ 11 támogatással és kísérleti teljes C ++ 14 támogatással rendelkezik. A teljes C ++ 11 támogatás a Dual ABI elfogadásával lehetséges, további részletekért lásd: https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html.
- A C front-end alapértelmezés szerint C11 módban van a GNU kiterjesztésekkel, ami befolyásolja az inline kulcsszó szemantikáját és számos más látható változást hoz létre, lásd: https://gcc.gnu.org/gcc-5/porting_to.html további részletekért.
- Az GCC 5.1 különböző interprocedural optimalizációs fejlesztéseket tartalmaz, pl. egy új IPA azonosító kód átcsatolási jelet és különböző LTO fejlesztéseket, pl. ODR-alapú C ++ típusok egyesítése, további részletekért lásd: http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html.
- Az GCC 5.1 Local Register Allocator most tartalmaz egy rematerializációs alpassot, az i? 86 / x86-64 képes újra felhasználni a PIC kemény regisztert a helymeghatározó kód teljesítményének javítása érdekében, van egy egyszerű interprocedural RA pass és számos más regiszter hozzárendelték a javítások javítását.
- Az GCC 5.1 részleges támogatást nyújt az OpenACC szabványnak, támogatja az OpenMP 4.0 letöltését az Intel közelgő Xeon Phi gyorsítói számára, és támogatja az OpenACC offloading-ot PTX-hez. Az Undefined Behavior Sanitizer a GCC-ben kibővült számos új futásidejű ellenőrzéssel. Egy kísérleti GCC JIT könyvtárat adtak az GCC 5.1-ben.
Mi az új a 4.8.4-es verzióban:
- Általános optimalizáló javítások:
- Az ARM-en elérhető a AddressSanitizer, egy gyors memória-hibaérzékelő.
- Nem definiáltBehaviorSanitizer (ubsan), egy gyors, nem definiált viselkedési detektor, hozzáadva, és engedélyezhető a -fsanitize = undefined paranccsal. Különböző számításokat fognak eszközezni a meghatározatlan viselkedés észleléséhez futás közben. Az UndefinedBehaviorSanitizer jelenleg elérhető a C és C ++ nyelvekhez.
- Link-time optimalizálás (LTO) fejlesztések:
- A beolvasztás típusát újraírta. Az új implementáció lényegesen gyorsabb és kevesebb memóriát használ.
- Jobb partícionálási algoritmus, ami a kapcsolatidő alatt kevesebb adatfolyamot eredményez
- A virtuális módszerek korai eltávolítása csökkenti az objektumfájlok méretét, javítja a link-idő memóriahasználatot és fordítja az időt.
- A funkciók testreszabása már igény szerint van betöltve, és korábban javította a teljes memóriahasználatot a kapcsolat időben.
- A C ++ rejtett kulcsfontosságú módszerek mostantól optimalizálhatók.
- Linker plugin használata esetén a -flto opcióval történő fordítása most vékony objektumfájlokat (.o) hoz létre, amelyek csak az LTO közvetítő nyelvi reprezentációját tartalmazzák. A -ffat-lto-objektumok használatával olyan fájlokat hozhat létre, amelyek az objektumkódot is tartalmazzák. Az LTO feldolgozásra alkalmas statikus könyvtárak létrehozásához használja a gcc-ar és gcc-ranlib; a vékony objektumfájlok szimbólumainak listázása gcc-nm-et használ. (Ez megköveteli, hogy az ar, a ranlib és az nm kompatibilisek legyenek plugin támogatással.)
- Memóriahasználati épület A hibajavítás engedélyezett Firefoxa 15 GB-ról 3,5 GB-ra csökkent; összekapcsolási idő 1700 másodperctől 350 másodpercig.
- Az eljárásközi optimális fejlesztések:
- Új típusú öröklési elemző modul, amely javítja a devultualizációt. A devetualizálás most figyelembe veszi az anonim névtereket és a C ++ 11 végleges kulcsszót.
- Új spekulatív devrimualizációs lépés (amelyet -fdevirtualize-spekulatív módon szabályozunk.
- A spekulatív közvetlen hívásokat közvetett irányba fordították, ahol a közvetlen hívás nem olcsóbb.
- Helyi álnevek kerülnek bevezetésre azon szimbólumok számára, amelyekről ismert, hogy szemantikailag egyenértékűek a megosztott könyvtárakban, javítva a dinamikus összekapcsolási időt.
- A visszajelzéssel kapcsolatos optimalizált fejlesztések:
- A C ++ inline függvények alkalmazásának profilozása most megbízhatóbb.
- Az új időprofil meghatározza a funkciók végrehajtásának tipikus sorrendjét.
- Az új funkció átrendező lépés (amelyet a -freorder-függvények vezérelnek) jelentősen csökkenti a nagy alkalmazások indítási idejét. Amíg a binutils támogatás nem fejeződött be, akkor csak a kapcsolatidős optimalizálással működik.
- A visszacsatolt közvetett híváseltávolítás és a devetualizálás mostantól a modulok közötti hívásokat kezeli, ha a kapcsolatidő optimalizálás engedélyezve van.
- Új nyelvek és nyelvi fejlesztések:
- Az OpenMP specifikáció 4.0 verziója már támogatott a C és C ++ fordítóprogramokban, és a 4.9.1 verziótól kezdve a Fortran fordítóban is. Az új -fopenmp-simd opció használható az OpenMP SIMD direktíváinak engedélyezésére, figyelmen kívül hagyva más OpenMP irányelveket. Az új -fsimd-cost-model = opció lehetővé teszi az OpenMP és a Cilk Plus simd direktívákkal megjelölt hurkok vektorizációs költségmodelljét; -Wopenmp-simd figyelmeztet, ha a jelenlegi költségmodell felülírja a felhasználó által beállított simd irányelveket.
- A C, C ++ és Fortran fordítókhoz a -Wdate-time opciót adták hozzá, amely figyelmeztet arra, hogy mikor használják a __DATE__, __TIME__ vagy __TIMESTAMP__ makrókat. Ezek a makrók meggátolhatják a bit-bölcsességgel azonos reprodukálható összeállításokat.
- Ada:
- A GNAT alapértelmezés szerint az Ada 2012 helyett Ada 2012-re vált.
- C család:
- Hozzáadta a GCC által kiadott diagnosztika színezésének támogatását. A -diagnostics-color = auto engedélyezi, ha a terminálok kimenete, -diagnostika-szín = mindig feltétel nélkül. A GCC_COLORS környezeti változó használható a színek testreszabására vagy a színezés letiltására. Ha a GCC_COLORS változó jelen van a környezetben, az alapértelmezés szerint: -fdiagnostics-color = auto, egyébként -fdiagnostics-color = soha.
- Minta diagnosztikai kimenet:
- $ g ++ -fdiagnostics-color = mindig -S -Wall teszt.C
- test.C: A & lsquo; int foo () 'függvényben:
- test.C: 1: 14: figyelmeztetés: nincs visszatérési utasítás a nem érvénytelen [-Wreturn típusú]
- int foo () {}
- test.C: 2: 46: hiba: a sablon példánymélysége meghaladja a 900-at (használja a -függőlemez-mélységet = növeli a maximálisat) instantiating & lsquo; struct X '
- sablon struktúra X {statikus const int value = X :: érték; }; sablon struktúra X;
- test.C: 2: 46: rekurzív módon szükséges a & lsquo; const int X :: értéktől "
- test.C: 2: 46: kötelező az & lsquo; const int X :: értéke "
- test.C: 2: 88: itt szükséges
- teszt.C: 2: 46: hiba: hiányos típus & lsquo; X 'beágyazott nevek specifikátorában használt
- Az új #pragma GCC ivdep használatával a felhasználó kijelentheti, hogy nincs olyan hurokviszonyos függőségi viszony, amely megakadályozná a egymást követő iterációk párhuzamos végrehajtását a SIMD (egyszeres utasítás többszörös adat) utasításokkal.
- A Cilk Plus támogatása hozzá lett adva, és engedélyezhető a -fcilkplus opcióval. A Cilk Plus a C és C ++ nyelvek kiterjesztése az adatok és feladatok párhuzamosságának támogatására. A jelenlegi megvalósítás az ABI 1.2 verzióját követi; minden funkció, de a _Cilk_for végrehajtásra került.
- Az ISO C11 atommagok (az _Atomic típusú specifikátor és a minősítő és a fejléc) most támogatott.
- Az ISO C11 általános kiválasztása (_Generic keyword) mostantól támogatott.
- Most támogatott az ISO C11 szál-helyi tároló (_Thread_local, hasonló a GNU C __threadhez).
- Az ISO C11 támogatás az ISO C99 támogatáshoz hasonlóan teljes körű: lényegében teljes modulo hibák, kiterjesztett azonosítók (támogatott, kivéve a sarki eseteket, amikor a "kiterjesztett azonosítókat használják"), lebegőpontos kérdések (főleg, de nem teljesen az F és G mellékletek opcionális C99 jellemzőivel és az opcionális K mellékletekkel (Bounds-checking interfaces) és L (elemezhetőséggel) kapcsolatban.
- Az új C kiterjesztés __auto_type a C ++ 11 auto funkcióinak egy alcsoportját biztosítja a GNU C-ben.
- C ++:
- A normál funkciókra vonatkozó C ++ 1y visszaadott típusú levonás G ++ implementációja az N3638-nak megfelelően lett frissítve, a javaslat elfogadta a munkadokumentumot. Leginkább a decltype (auto) adja hozzá a "decltype" szemantikához, nem pedig a sima automata sablon argumentum levonási szemantikájához:
- int & amp; f ();
- auto i1 = f (); // int
- decltype (automatikus) i2 = f (); // int & amp;
- A G ++ támogatja a C ++ 1y lambda capture inicializátorokat:
- [x = 42] {...};
- Valójában a GCC 4.5 óta fogadták el őket, de most a fordító nem figyelmezteti őket a -std = c ++ 1y-vel, és támogatja a zárójelben lévő és zárójelben lévő inicializátorokat is.
- A G ++ támogatja a C ++ 1y változó hosszúságú tömböket. A G ++ hosszú idő óta támogatja a GNU / C99-stílusú VLA-kat, de most támogatja az inicializátorokat és a lambda rögzítést is. A C ++ 1y módban a G ++ panaszkodik a VLA-felhasználásokról, amelyek nem megengedettek a szabványos tervezetben, például egy mutató létrehozása VLA-típusra vagy a sizeof egy VLA változóra való alkalmazása. Megjegyezzük, hogy most úgy tűnik, hogy a VLA nem része a C ++ 14-nek, de része lesz egy különálló dokumentumnak, majd talán C ++ 17-nek.
- void f (int n) {
- int a [n] = {1, 2, 3}; // throws std :: bad_array_length ha n & lt; 3
- [& amp; a] {a (int i: a) {cout számára
Az újdonság a 4.9.1-es verzióban:
- Az GCC 4.9.1 egy hibajavító kiadás az GCC 4.9 ágból, amely fontos javításokat tartalmaz a regresszióhoz és súlyos hibákhoz az GCC 4.9.0 verziójában, több mint 88 hibával javítva az előző kiadás óta. Ezenkívül a GCC 4.9.1 kiadás támogatja az OpenMP 4.0-at Fortranban is, nem pedig csak a C és C ++ verziókban.
Az újdonság a 4.9.0 verzióban:
- Általános optimalizáló javítások:
- Az ARM-en elérhető a AddressSanitizer, egy gyors memória-hibaérzékelő.
- Nem definiáltBehaviorSanitizer (ubsan), egy gyors, nem definiált viselkedési detektor, hozzáadva, és engedélyezhető a -fsanitize = undefined paranccsal. Különböző számításokat fognak eszközezni a meghatározatlan viselkedés észleléséhez futás közben. Az UndefinedBehaviorSanitizer jelenleg elérhető a C és C ++ nyelvekhez.
- Link-time optimalizálás (LTO) fejlesztések:
- A beolvasztás típusát újraírta. Az új implementáció lényegesen gyorsabb és kevesebb memóriát használ.
- Jobb partícionálási algoritmus, ami a kapcsolatidő alatt kevesebb adatfolyamot eredményez
- A virtuális módszerek korai eltávolítása csökkenti az objektumfájlok méretét, javítja a link-idő memóriahasználatot és fordítja az időt.
- A funkciók testreszabása már igény szerint van betöltve, és korábban javította a teljes memóriahasználatot a kapcsolat időben.
- A C ++ rejtett kulcsfontosságú módszerek mostantól optimalizálhatók.
- Linker plugin használata esetén a -flto opcióval történő fordítása mostanra vékony objektumfájlokat (.o) hoz létre, amelyek csak az LTO nyelvi megjelenítését tartalmazzák. A -ffat-lto-objektumok használatával olyan fájlokat hozhat létre, amelyek az objektumkódot is tartalmazzák. Az LTO feldolgozásra alkalmas statikus könyvtárak létrehozásához használja a gcc-ar és gcc-ranlib; a vékony objektumfájlok szimbólumainak listázása gcc-nm-et használ. (Szükséges, hogy az ar, a ranlib és az nm kompatibilisek legyenek plugin támogatással.)
- Memóriahasználati épület A hibajavítás engedélyezett Firefoxa 15 GB-ról 3,5 GB-ra csökkent; összekapcsolási idő 1700 másodperctől 350 másodpercig.
- Az eljárásközi optimális fejlesztések:
- Új típusú öröklési elemző modul, amely javítja a devultualizációt. A devetualizálás most figyelembe veszi az anonim névtereket és a C ++ 11 végleges kulcsszót.
- Új spekulatív devrimualizációs lépés (amelyet -fdevirtualize-spekulatív módon szabályozunk.
- A spekulatív közvetlen hívásokat közvetett irányba fordították, ahol a közvetlen hívás nem olcsóbb.
- Helyi álnevek kerülnek bevezetésre azon szimbólumok számára, amelyekről ismert, hogy szemantikailag egyenértékűek a megosztott könyvtárakban, javítva a dinamikus összekapcsolási időt.
- A visszajelzéssel kapcsolatos optimalizált fejlesztések:
- A C ++ inline függvények alkalmazásának profilozása most megbízhatóbb.
- Az új időprofil meghatározza a funkciók végrehajtásának tipikus sorrendjét.
- Az új funkció átrendező lépés (amelyet a -freorder-függvények vezérelnek) jelentősen csökkenti a nagy alkalmazások indítási idejét. Amíg a binutils támogatás nem fejeződött be, akkor csak a kapcsolatidős optimalizálással működik.
- A visszacsatolt közvetett híváseltávolítás és a devetualizálás mostantól a modulok közötti hívásokat kezeli, ha a kapcsolatidő optimalizálás engedélyezve van.
- Új nyelvek és nyelvi fejlesztések:
- Az OpenMP specifikáció 4.0 verziója már támogatott a C és C ++ fordítókhoz. Az új -fopenmp-simd opció használható az OpenMP SIMD direktíváinak engedélyezésére, figyelmen kívül hagyva más OpenMP irányelveket. Az új -fsimd-cost-model = opció lehetővé teszi az OpenMP és a Cilk Plus simd direktívákkal megjelölt hurkok vektorizációs költségmodelljét; -Wopenmp-simd figyelmeztet, ha az aktuális költségmodell felülírja a felhasználó által beállított simd utasításokat.
- A C, C ++ és Fortran fordítókhoz a -Wdate-time opciót adták hozzá, amely figyelmeztet arra, hogy mikor használják a __DATE__, __TIME__ vagy __TIMESTAMP__ makrókat. Ezek a makrók meggátolhatják a bit-bölcsességgel azonos reprodukálható összeállításokat.
- Ada:
- A GNAT alapértelmezés szerint az Ada 2012 helyett Ada 2012-re vált.
- C család:
- Hozzáadta a GCC által kiadott diagnosztika színezésének támogatását. A -diagnostics-color = auto engedélyezi, ha a terminálok kimenete, -diagnostika-szín = mindig feltétel nélkül. A GCC_COLORS környezeti változó használható a színek testreszabására vagy a színezés letiltására. Ha a GCC_COLORS változó jelen van a környezetben, az alapértelmezés szerint: -fdiagnostics-color = auto, egyébként -fdiagnostics-color = soha.
- Minta diagnosztikai kimenet:
- $ g ++ -fdiagnostics-color = mindig -S -Wall teszt.C
- test.C: A & lsquo; int foo () 'függvényben:
- test.C: 1: 14: figyelmeztetés: nincs visszatérési utasítás a nem érvénytelen [-Wreturn típusú]
- int foo () {}
- test.C: 2: 46: hiba: a sablon példánymélysége meghaladja a 900-at (használja a -függőlemez-mélységet = növeli a maximálisat) instantiating & lsquo; struct X '
- sablon struktúra X {statikus const int value = X :: érték; }; sablon struktúra X;
- test.C: 2: 46: rekurzív módon szükséges a & lsquo; const int X :: értéktől "
- test.C: 2: 46: kötelező az & lsquo; const int X :: értéke "
- test.C: 2: 88: itt szükséges
- teszt.C: 2: 46: hiba: hiányos típus & lsquo; X 'beágyazott nevek specifikátorában használt
- Az új #pragma GCC ivdep használatával a felhasználó kijelentheti, hogy nincs olyan hurokviszonyos függőségi viszony, amely megakadályozná a egymást követő iterációk párhuzamos végrehajtását a SIMD (egyszeres utasítás többszörös adat) utasításokkal.
- A Cilk Plus támogatása hozzá lett adva, és engedélyezhető a -fcilkplus opcióval. A Cilk Plus a C és C ++ nyelvek kiterjesztése az adatok és feladatok párhuzamosságának támogatására. A jelenlegi megvalósítás az ABI 1.2 verzióját követi; minden funkció, de a _Cilk_for végrehajtásra került.
- Az ISO C11 atommagok (az _Atomic típusú specifikátor és a minősítő és a fejléc) most támogatott.
- Az ISO C11 általános kiválasztása (_Generic keyword) mostantól támogatott.
- Most támogatott az ISO C11 szál-helyi tároló (_Thread_local, hasonló a GNU C __threadhez).
- Az ISO C11 támogatás az ISO C99 támogatáshoz hasonlóan teljes körű: lényegében teljes modulo hibák, kiterjesztett azonosítók (támogatott, kivéve a sarki eseteket, amikor a "kiterjesztett azonosítókat használják"), lebegőpontos kérdések (főleg, de nem teljesen az F és G mellékletek opcionális C99 jellemzőivel és az opcionális K mellékletekkel (Bounds-checking interfaces) és L (elemezhetőséggel) kapcsolatban.
- Az új C kiterjesztés __auto_type a C ++ 11 auto funkcióinak egy alcsoportját biztosítja a GNU C-ben.
- C ++:
- A normál funkciókra vonatkozó C ++ 1y visszaadott típusú levonás G ++ implementációja az N3638-nak megfelelően lett frissítve, a javaslat elfogadta a munkadokumentumot. Leginkább a decltype (auto) adja hozzá a "decltype" szemantikához, nem pedig a sima automata sablon argumentum levonási szemantikájához:
- int & amp; f ();
- auto i1 = f (); // int
- decltype (automatikus) i2 = f (); // int & amp;
- A G ++ támogatja a C ++ 1y lambda capture inicializátorokat:
- [x = 42] {...};
- Valójában a GCC 4.5 óta fogadták el őket, de most a fordító nem figyelmezteti őket a -std = c ++ 1y-vel, és támogatja a zárójelben lévő és zárójelben lévő inicializátorokat is.
- A G ++ támogatja a C ++ 1y változó hosszúságú tömböket. A G ++ hosszú idő óta támogatja a GNU / C99-stílusú VLA-kat, de most támogatja az inicializátorokat és a lambda rögzítést is. A C ++ 1y módban a G ++ panaszkodik a VLA-felhasználásokról, amelyek nem megengedettek a szabványos tervezetben, például egy mutató létrehozása VLA-típusra vagy a sizeof egy VLA változóra való alkalmazása. Megjegyezzük, hogy most úgy tűnik, hogy a VLA nem része a C ++ 14-nek, de része lesz egy különálló dokumentumnak, majd talán C ++ 17-nek.
- void f (int n) {
- int a [n] = {1, 2, 3}; // throws std :: bad_array_length ha n & lt; 3
- [& amp; a] {a (int i: a) {cout számára
1 Hozzászólások
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