# GNU Compiler Collection (GCC)
**GNU Compiler Collection** (GCC), [GNU Projesi](https://www.gnu.org/) tarafından üretilen, özgür ve açık kaynaklı bir derleyici sistemidir. Başlangıçta yalnızca [C programlama dili](https://www.nedemek.page/kavramlar/c%20programlama%20dili) için bir derleyici olarak tasarlanmış olsa da, zamanla C++, Objective-C, Fortran, Ada, Go ve D dahil olmak üzere birçok farklı programlama dilini destekleyecek şekilde genişletilmiştir. GCC, çeşitli işletim sistemlerinde ve donanım mimarilerinde kullanılabilirliği sayesinde, en yaygın kullanılan derleyicilerden biridir.
## Tarihçe
GCC'nin kökleri 1980'lere dayanır. İlk olarak [Richard Stallman](https://www.nedemek.page/kavramlar/richard%20stallman) tarafından GNU projesi için özgür bir derleyici olarak yazılmıştır. Başlangıçta "GNU C Compiler" (GNU C Derleyicisi) anlamına gelen GCC, daha sonra birden fazla dili destekleyecek şekilde genişletildikten sonra "GNU Compiler Collection" (GNU Derleyici Koleksiyonu) olarak yeniden adlandırılmıştır.
* **1987:** GCC'nin ilk sürümü yayınlandı.
* **1990'lar:** C++ desteği eklendi ve GCC, özgür yazılım dünyasında yaygın olarak benimsendi.
* **2000'ler ve sonrası:** Diğer diller için destekler eklendi ve GCC sürekli olarak geliştirilmeye devam etti.
## Temel Özellikleri
* **Çoklu Dil Desteği:** C, C++, Objective-C, Fortran, Ada, Go, D gibi çeşitli programlama dillerini destekler.
* **Çoklu Platform Desteği:** [Linux](https://www.nedemek.page/kavramlar/linux), [Windows](https://www.nedemek.page/kavramlar/windows), [macOS](https://www.nedemek.page/kavramlar/macos) ve diğer birçok işletim sisteminde çalışabilir.
* **Optimizasyon:** Kodun performansını artırmak için çeşitli optimizasyon teknikleri sunar. Bu optimizasyonlar, kodun boyutunu küçültmek, yürütme hızını artırmak veya her ikisini de yapmak için kullanılabilir.
* **Standartlara Uygunluk:** Çeşitli programlama dillerinin standartlarına uygun bir şekilde çalışır. Örneğin, [C++](https://www.nedemek.page/kavramlar/c++) derlemesi için [ISO C++ standardı](https://www.nedemek.page/kavramlar/iso%20c++%20standardı)'na uyumluluk hedeflenir.
* **Genişletilebilirlik:** Eklentiler ve kütüphaneler aracılığıyla genişletilebilir. Bu, kullanıcılara GCC'nin işlevselliğini ihtiyaçlarına göre özelleştirme olanağı tanır.
* **Özgür Yazılım:** [GNU Genel Kamu Lisansı](https://www.nedemek.page/kavramlar/gnu%20genel%20kamu%20lisansı) (GPL) altında lisanslanmıştır, bu da kullanıcıların yazılımı özgürce kullanmasına, değiştirmesine ve dağıtmasına olanak tanır.
## Çalışma Prensibi
GCC, kaynak kodu alıp hedef koda dönüştürmek için bir dizi aşamadan geçer. Bu aşamalar şunları içerir:
1. **Önişleme (Preprocessing):** `#include` direktiflerini işler, makroları genişletir ve koşullu derleme direktiflerini değerlendirir.
2. **Derleme (Compilation):** Önişlenmiş kodu, derleyici tarafından yorumlanabilir bir ara dile (genellikle assembly diline) çevirir.
3. **Assembly (Assembly):** Assembly kodunu, makine koduna dönüştürür. Bu adım, hedef platformun mimarisine özgü talimatları içerir.
4. **Bağlama (Linking):** Makine kodunu, gerekli kütüphanelerle birleştirerek yürütülebilir bir dosya oluşturur.
## Kullanım Alanları
GCC, çok çeşitli uygulamalarda kullanılır:
* **Sistem Yazılımı Geliştirme:** İşletim sistemleri, aygıt sürücüleri ve diğer düşük seviyeli sistem yazılımları geliştirmek için kullanılır.
* **Uygulama Geliştirme:** Masaüstü uygulamaları, web uygulamaları ve mobil uygulamalar gibi çeşitli uygulamalar geliştirmek için kullanılır.
* **Gömülü Sistemler:** Gömülü sistemler için yazılım geliştirmek için kullanılır.
* **Akademik Araştırma:** Bilgisayar bilimi ve mühendislik alanlarında yapılan araştırmalarda yaygın olarak kullanılır.
* **Oyun Geliştirme:** Birçok oyun geliştirme motoru ve kütüphanesi GCC ile derlenebilir.
## Örnek Kullanım
Bir [C programı](https://www.nedemek.page/kavramlar/c%20programı)'nı derlemek için şu komut kullanılabilir:
```bash
gcc hello.c -o hello
Bu komut, hello.c
adlı C kaynak kodu dosyasını derler ve hello
adlı bir yürütülebilir dosya oluşturur.
C++ programı'nı derlemek için ise g++
kullanılır:
g++ hello.cpp -o hello
GCC, diğer derleyicilerle karşılaştırıldığında, geniş platform desteği, özgür yazılım olması ve yüksek kaliteli kod üretme yeteneği gibi avantajlara sahiptir. Ancak, bazı ticari derleyiciler, belirli platformlar için daha iyi performans veya daha gelişmiş özellikler sunabilir. Örneğin, Microsoft Visual C++ özellikle Windows platformu için optimize edilmişken, Intel C++ Compiler Intel işlemciler için daha iyi performans sağlayabilir.
GCC, çok çeşitli programlama dillerini destekleyen, geniş platform desteği sunan ve özgür yazılım lisansı altında dağıtılan güçlü bir derleyici sistemidir. Sistem yazılımı geliştirmeden uygulama geliştirmeye, gömülü sistemlerden akademik araştırmalara kadar birçok alanda yaygın olarak kullanılmaktadır.