GCC:n alkuperäinen nimi oliGNU C Compiler ja se osasi kääntää vainC-kieltä. Nyttemmin GCC osaa kääntää myösC++,Fortran,Ada,Objective-C,Go jaD -kieliä.[3][4]Java-kääntäjä on poistettu GCC:stä versiosta 7 alkaen.[5] Varhainen tukiRust-kielelle on lisätty joulukuussa 2022, mutta tuki ei ole vielä täysin valmis GCC version 13 julkaisuun mennessä.[6][7]Modula-2-kielen tuki on lisätty kehitysversioon joulukuussa 2022.[8]
Richard Stallman aloitti GCC:n kehityksen. GCC oli aluksi kirjoitettuPastel-kielellä, joka oliPascal-kielen murre.[9] Jotta kääntäjä saatiin kevyemmäksi ja helpommin käännettäväksiLen Tower ja Stallman kirjoittivat sen uudelleen C-kielellä.[9][10] Ensimmäinen beetaversio julkaistiin 22. maaliskuuta 1987 ja 1.0 julkaistiin 23. toukokuuta.[11][1] Ensimmäinen C++:aa kääntänyt versio, 1.15.3, julkaistiin 18. joulukuuta samana vuonna.[1]
Vuonna 1997 ryhmä kehittäjiä, jotka kyllästyivät GCC:n hitaaseen kehitykseen ja suljettuun kehitysryhmään, muodosti projektin nimeltä EGCS (Experimental/Enhanced GNU Compiler System), joka otti mukaan ominaisuuksia eräistä GCC:n epävirallisista muunnoksista, kutenFortran 77 -kääntäjän,IBM:n kehittämän Haifa-optimoijan jaPentium-optimoinnin. Myöhemmin Free Software Foundation lopetti oman GCC 2.x:n kehityksensä ja EGCS:sta tuli virallinen GCC huhtikuussa 1999.[12]
GCC:n versio 4.2.1 oli viimeinen, joka julkaistiin GPL-lisenssin versiolla 2. Myöhemmät versiot käyttävät lisenssin versiota 3.[13]
GCC:n toteutusta on muutettu C-kielestä C++:n alijoukolle: tavoitteena on säilyttää yhteensopivuus edeltävään versioon sekä mahdollisuus kääntää GCC muilla kääntäjillä.[14]
Versio 7.1 lisää tuenC++17-standardin kaikille ominaisuuksille.[15] Versio 14.1 sisältää tukea useilleC++26-standardin ominaisuuksille. Oletuksena GCC 14 käyttää vielä C++17-standardia.[16][17]
Versiossa 15 mukana onCOBOL-kielen tuki gCobol-kääntäjällä, joka on eri kuin vanhempi C-kieleksi tulkannut GnuCOBOL-kääntäjä.[18]
Yleiskuva GCC:n käyttämistä ohjelmista. Käännöksen aikana käytetään varsinaisen kääntäjän lisäksiesikääntäjää,assembleria jalinkkeriohjelmaa.GCC käyttää kolmivaiheista arkkitehtuuria, jolla se tukee useita ohjelmointikieliä ja useita suorittimia.
GCC sisältää useitaedustaosia (engl.front end) eri kieliä varten jataustaosia (engl.back end) kohdesuorittimia varten.[19][20][21] GCC käyttää käännöksen aikana kolmeavälikieltä: GENERIC, GIMPLE ja RTL. GENERIC on kielestä riippumaton muoto, jota jokainen edustaosa tuottaa. GCC:nvälivaihe (engl.middle end) käsittelee GIMPLE-välikieltä, jossa jokaisessa ilmaisussa voi olla enintään kolmeoperandia. GIMPLE:stä tehdään SSA-muoto, johon sovelletaanohjelman optimointia, ja muunnetaan takaisin GIMPLE-muotoon taustaosaa varten.[22][23][24][25][26] SSA-muoto (Static Single Assignment) on tarkoitettu tietovuon ja ohjelman ohjausvuon optimointiin.[27][28] RTL (Register Transfer Language) on lähellä varsinaista käskyä ja viimeinen välikieli käännöksessä.[29]
GCC sisältää tuen C-kielen eri standardiversioille sekä GNU-laajennuksille kieleen: versiossa 12.2.0 oletuksena käytössä ongnu17-versio (C18 GNU-laajennuksilla).[30]C90-versio on tuettu teknisien korjausten kanssa (Technical Corrigenda, 1994 ja 1996) ja vuonna 1995 julkaistu laajennettu versio (Amendment 1).C99-versio on tuettu teknisien korjauksien kanssa (2001, 2004 ja 2007).C11-versio on tuettu ja C17-version korjauksien kanssa.[30] Kääntäjässä on myös useita laajennuksia, jotka eivät ole mukana ISO-standardissa.[31]
GCC on kehitetty ja tukee pääasiallisestiPOSIX-yhteensopivia alustoja (Linux ja muut Unixin kaltaiset käyttöjärjestelmät), mutta se on siirretty myös useille muille alustoille.[35][36]GCC:stä on julkaistu epävirallisia käännöksiä muun muassaAIX,HP-UX,DOS (DJGPP),macOS jaMicrosoft Windows (MinGW jaCygwin) -alustoille.[37]Apple poisti vaiheittain kaikkiGNU GPL -lisensoidut ohjelmistot OS X -käyttöjärjestelmästä (nykyisin nimellä macOS) ja on ottanut käyttöönsäLLVM:n.[38][39][40]