Yan yana
CvsC++
C ile C++ arasındaki fark nedir?
Güncellendi 2 dk okuma6 fark
Kısaca
C, 1970'lerin başından kalma küçük, prosedürel bir sistem dilidir; ondan doğan C++ ise sınıflar, şablonlar ve zengin bir kütüphaneyle çok daha büyük bir dildir.
C
C, belleğe doğrudan erişim sağlayan, derlenen ve düşük seviyeli bir programlama dilidir; işletim sistemlerinde, sürücülerde ve gömülü yazılımlarda kullanılır.
C sayfasını okuC++
C++, C'yi sınıflar ve şablonlarla genişleten; bellek ve performans üzerinde düşük seviyeli kontrolü koruyan, derlenen ve statik tipli bir dildir.
C++ sayfasını okuC ve C++ karşılaştırması
| Özellik | C | C++ |
|---|---|---|
| Paradigma | Prosedürel | Çok paradigmalı: prosedürel, nesne yönelimli, generic |
| Dilin büyüklüğü | Küçük ve basit | Büyük ve karmaşık |
| Bellek yönetimi | malloc ve free ile elle | RAII, yıkıcılar ve akıllı işaretçiler |
| Standart kütüphane | Minimal | Zengin: container'lar, algoritmalar, string'ler, thread'ler |
| Generic kod | Makrolar ve void işaretçiler | Şablonlar (template) |
| Tipik kullanım | Çekirdekler, gömülü sistemler, sürücüler | Oyunlar, tarayıcılar, veritabanları, yüksek performanslı uygulamalar |
Fark, açıklamalı
C, 1970'lerin başında Bell Labs'te Dennis Ritchie tarafından Unix işletim sistemini yazmak için geliştirildi. Kompakt ve donanıma yakındır: fonksiyonlar, struct'lar, işaretçiler ve malloc ile free kullanılan elle bellek yönetimi. C++ ise Bjarne Stroustrup tarafından 1979'da "C with Classes" (sınıflı C) olarak başlatıldı ve ilk ticari sürümü 1985'te çıktı; C kodunun çoğu küçük değişikliklerle C++ olarak derlenebilir.
C++ bunun üzerine çok şey ekler. Sınıflar ve kalıtım nesne yönelimli tasarımı destekler, şablonlar genel (generic) kodu mümkün kılar; RAII de kaynakları nesne ömürlerine bağlar, böylece yıkıcılar (destructor) ve std::unique_ptr gibi akıllı işaretçiler belleği, dosyaları ve kilitleri otomatik serbest bırakır. Standart kütüphane de C programcılarının elle yazacağı container'ları, algoritmaları, string'leri ve thread'leri sunar.
C, sadeliğin ve öngörülebilirliğin en önemli olduğu işletim sistemi çekirdeklerinin, gömülü yazılımların, aygıt sürücülerinin ve diller arasındaki kararlı arayüzlerin dili olmaya devam ediyor. C++ ise soyutlamalarının hızdan vazgeçmeden büyük kod tabanlarını yönetmeye yardım ettiği oyun motorlarına, tarayıcılara, veritabanlarına, alım satım sistemlerine ve yüksek performanslı uygulamalara hâkimdir.
Sık yapılan bir yanlış, C++'ın yalnızca ekstraları olan C olduğunu ya da modern C++'ın C gibi yazılması gerektiğini düşünmektir. Deyimsel (idiomatic) C++ çıplak new ve delete'ten kaçınır, standart container'ları ve akıllı işaretçileri kullanır ve RAII'ye dayanır; C++'ta C tarzı kod yazmak güvenliğinin çoğundan vazgeçmek demektir. Rust da her iki alanda yeni sistem kodu için bir alternatif hâline geldi.
Hangisini kullanmalısınız?
C şu durumlarda doğru seçim:
- Donanıma yakın gömülü yazılım, çekirdek ya da sürücü yazıyorsunuz.
- Minimal bir çalışma ortamına ve çok öngörülebilir bir çıktıya ihtiyacınız var.
- Başka diller için kararlı bir kütüphane arayüzü yazıyorsunuz.
C++ şu durumlarda doğru seçim:
- Oyun motoru gibi büyük ve performansa kritik bir uygulama geliştiriyorsunuz.
- Hızdan vazgeçmeden sınıflar ve şablonlar gibi soyutlamalar istiyorsunuz.
- RAII ile otomatik kaynak yönetimi istiyorsunuz.
Sık sorulan sorular
C++'tan önce C öğrenmeli miyim?
Gerekli değil. Önce C öğrenmek belleği ve işaretçileri açıkça öğretir, ama modern C++ en iyi baştan RAII ve standart container'lar gibi kendi deyimleriyle öğrenilir.
C++, C'den daha mı hızlı?
Performansları karşılaştırılabilir düzeydedir. İki dilde de iyi yazılmış kod benzer hızda makine koduna derlenir; C++ soyutlamaları da kullanılmadıklarında hiçbir maliyeti olmayacak şekilde tasarlanmıştır.
C ve C++ kodu birlikte kullanılabilir mi?
Evet. C++ C fonksiyonlarını doğrudan çağırabilir; C++ kodu da extern "C" ile fonksiyonlarını dışarı açarak C programlarının ve başka dillerin onları çağırmasını sağlayabilir.