*Tämä artikkeli kertoo ohjelmoinnista. GCC on myös Gulf Cooperation Councilin lyhenne*

**GNU Compiler Collection** (yleensä **GCC**) on GNU-projektin kääntäjien kokoelma. Se on Free Software Foundationin vapaata ohjelmistoa, ja julkaistu GNU GPL:n ja osin LGPL:n alaisuudessa. GCC on GNUn kehitysympäristön tärkein osa ja vapaiden Unixin kaltaisten käyttöjärjestelmien vakiokääntäjä ja usein hyödynnetty myös kaupallisten kehitysympäristöjen kanssa.

GCC:n alkuperäinen nimi oli **GNU C Compiler** ja se osasi kääntää vain C:tä. Nyttemmin GCC osaa kääntää myös C++:a, Fortrania, Adaa, Objective-C:tä, Go:ta ja D:tä. Java-kääntäjä on poistettu GCC:stä versiosta 7 alkaen. Varhainen tuki Rust-kielelle on lisätty joulukuussa 2022, mutta tuki ei ole vielä täysin valmis GCC version 13 julkaisuun mennessä. Modula-2-kielen tuki on lisätty kehitysversioon joulukuussa 2022.

Historia
--------

Richard Stallman aloitti GCC:n kehityksen. GCC oli aluksi kirjoitettu Pastel-kielellä, joka oli Pascal-kielen murre. Jotta kääntäjä saatiin kevyemmäksi ja helpommin käännettäväksi Len Tower ja Stallman kirjoittivat sen uudelleen C-kielellä. Ensimmäinen beetaversio julkaistiin 22. maaliskuuta 1987 ja 1.0 julkaistiin 23. toukokuuta. Ensimmäinen C++:aa kääntänyt versio, 1.15.3, julkaistiin 18. joulukuuta samana vuonna.

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, kuten Fortran 77 -kääntäjän, IBM:n kehittämän Haifa-optimoijan ja Pentium-optimoinnin. Myöhemmin Free Software Foundation lopetti oman GCC 2.x:n kehityksensä ja EGCS:sta tuli virallinen GCC huhtikuussa 1999.

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.

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ä.

Versio 7.1 lisää tuen C++17-standardin kaikille ominaisuuksille.

Kielituki
---------

GCC sisältää tuen C-kielen eri standardiversioille sekä GNU-laajennuksille kieleen: versiossa 12.2.0 oletuksena käytössä on `gnu17`-versio (C18 GNU-laajennuksilla). 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. Kääntäjässä on myös useita laajennuksia, jotka eivät ole mukana ISO-standardissa.

C++-kielen versiot C++98, C++11, C++14, C++17 ja C++20 ovat tuettuja.

Objective-C versio 1.0 on tuettu, jonka lisäksi joukko 2.0:n ominaisuuksia on tuettu. Lisäksi Objective-C++ on tuettu.

Go-kielen Go 1 -versio on tuettu GCC:n versiosta 4.7.1 lähtien.

GCC tukee D 2.0 -kieltä.

Arkkitehtuurit
--------------

GCC:n kohdesuorittimet versiosta 4.3 lähtien:

* Alpha
* ARM
* AVR
* Blackfin
* Epiphany (GCC 4.8)
* H8/300
* HC12
* IA-32 (x86)
* IA-64 (Intel Itanium), poistuu versiossa 14
* MIPS
* Motorola 68000 -sarja
* PA-RISC
* PDP-11
* PowerPC
* R8C / M16C / M32C
* SPARC
* SPU
* SuperH
* System/390 / zSeries
* VAX
* x86-64

Vähemmän tunnettuja suorittimia joita tuetaan vakiojulkaisussa:

* 68HC11
* AMD Am29000 (A29K)
* CR16
* C6x
* D30V
* DSP16xx
* ETRAX CRIS
* FR-30
* FR-V
* Intel i960
* IP2000
* M32R
* MCORE
* MIL-STD-1750A
* MMIX
* MN10200
* MN10300
* Motorola 88000
* NS32K
* IBM ROMP
* RL78
* Stormy16
* V850
* Xtensa

Lisää suorittimia tuetaan versioissa, joita ylläpidetään erillään GNU-projektin versiosta:

* Cortus APS3
* ARC
* AVR32
* C166 ja C167
* D10V
* EISC
* eSi-RISC
* Hexagon
* LatticeMico32
* LatticeMico8
* MeP
* MicroBlaze
* Motorola 6809
* MSP430
* NEC SX
* Nios II ja Nios
* OpenRISC
* PDP-10
* PIC24/dsPIC
* PIC32
* Propeller
* RISC-V
* Saturn (HP48XGCC)
* System/370
* TIGCC (m68k-muunnos)
* TriCore
* Z8000
* ZPU

Ristiinkääntäminen
------------------

GCC:tä voidaan käyttää ristiinkääntäjänä, jolloin käännösympäristönä voi olla eri alusta kuin varsinainen kohdealusta. Kohde voi olla esimerkiksi pelikonsoli (kuten PlayStation 2).

Lähteet
-------

1. 1 2 3
2. ↑  GCC 13.2 Released, 27. heinäkuuta 2023 (viitattu 27. heinäkuuta 2023). Tieto on haettu Wikidatasta.
3. ↑
4. ↑
5. ↑
6. ↑  Michael Larabel: GCC Rust "gccrs" Code Merged Into Mainline GCC 13 *phoronix.com*.  13.12.2022. Viitattu 13.12.2022. (englanniksi)
7. ↑  GCC 13 and the state of gccrs *rust-gcc.github.io*.  24.4.2023. Viitattu 25.4.2023. (englanniksi)
8. ↑  Michael Larabel: Modula-2 Language Frontend Merged Into GCC 13 *phoronix.com*.  14.12.2022. Viitattu 15.12.2022. (englanniksi)
9. 1 2  Gnu's Bulletin (sivu 10) *web.cecs.pdx.edu*.  helmikuu 1986. Viitattu 15.1.2020. (englanniksi)
10. ↑  Richard Stallman: The GNU Project *gnu.org*. Viitattu 7.3.2020. (englanniksi)
11. ↑
12. ↑
13. ↑  GCC's move to C++ *lwn.net*.  13.3.2013. Viitattu 29.2.2020. (englanniksi)
14. ↑  GCC 7.1 Released *LWN.net*.  2.5.2017. Viitattu 8.5.2017.
15. 1 2 3 4 5 6  2 Language Standards Supported by GCC *gcc.gnu.org*. Viitattu 28.11.2022. (englanniksi)
16. ↑  6 Extensions to the C Language Family *gcc.gnu.org*. Viitattu 20.1.2024. (englanniksi)
17. ↑  GCC 14 Release Series *gcc.gnu.org*. Viitattu 12.4.2024. (englanniksi)
18. ↑  Hexagon Project Wiki *codeaurora.org*.  Arkistoitu 24.12.2013. Viitattu 10.2.2020.
19. ↑  sx-gcc: port gcc to nec sx vector cpu *code.google.com*.
20. ↑  How to Build a GCC Cross-Compiler *preshing.com*.  19.11.2014. Viitattu 10.2.2020. (englanniksi)
21. ↑  setting up gcc as a cross-compiler *ps2stuff.playstation2-linux.com*.  Arkistoitu. Viitattu 10.2.2020. (englanniksi)
22. ↑  32-bit life support: Cross-compiling with GCC *opensource.com*. Viitattu 10.2.2020. (englanniksi)

Aiheesta muualla
----------------

* – GCC:n kotisivu