Menu

C Nedir? Diğer Her Şeyin Arkasındaki Programlama Dili

C, 1972'den kalma, hâlâ işletim sistemlerini, veritabanlarını ve neredeyse her gömülü cihazı çalıştıran küçük, hızlı ve derlenen bir dildir. İşte ne olduğu, nerede çalıştığı ve 2026'da neden öğrenmeye değer olduğu.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

C, Unix işletim sistemini yazmak için 1972'de Bell Labs'ta Dennis Ritchie tarafından oluşturulan, derlenen, genel amaçlı bir programlama dilidir. Kendi döneminden gelen neredeyse her şeyden daha uzun yaşadı ve sebebi basittir: C, makinenin bir ince katman üstünde durur. Size belleğe ve CPU'nun gerçek yeteneklerine doğrudan erişim verirken yine de bir insanın yazdığı bir şey gibi okunur.

Yarım yüzyıl sonra hâlâ diğer dillerin kendisiyle inşa edildiği dildir.

Eksiksiz Bir C Programı

İşte tüm dilin biçimi altı satırda. Çalıştır'a basın.

#include <stdio.h>, printf bilinsin diye standart girdi/çıktı bildirimlerini getirir. main, her C programının başladığı yerdir. printf metin yazar, \n bir satır sonudur ve return 0, işletim sistemine programın başarıyla bittiğini söyler. Bu eksiksiz, derlenebilir bir programdır - onu saracak bir sınıf ve altında bir çatı yoktur.

C'yi Farklı Kılan Nedir

Çoğu modern dil makineyi sizden gizler. C bunu bilerek yapmaz.

  • Yerel koda derlenir. Bir C programı tek bir CPU için makine komutlarına dönüşür ve arada bir yorumlayıcı ya da sanal makine olmadan doğrudan çalışır.
  • Belleği kendiniz yönetirsiniz. Çöp toplayıcı yoktur. Bellek istersiniz ve geri verirsiniz. Bu daha fazla iştir ve aynı zamanda C programlarının neden bu kadar az bellek kullandığının ve bu kadar öngörülebilir zamanlamaya sahip olduğunun sebebidir.
  • Küçüktür. C'nin yaklaşık 32 anahtar kelimesi vardır. Tüm dili aklınızda tutabilirsiniz ki bu C++, Java ya da Python için doğru değildir.
  • Neredeyse hiç çalışma zamanı yoktur. Bir C programı, birkaç kilobayt RAM'i olan ve hiç işletim sistemi olmayan bir mikrodenetleyicide çalışabilir.

Takas, güvenlik yerine dürüstlüktür. C, bir dizinin sonunun ötesini okumanıza ya da çoktan serbest bıraktığınız belleği kullanmanıza izin verir ve sizi durdurmaz. O hataların isimleri vardır - segmentation fault'lar, bellek sızıntıları, tanımsız davranış - ve C öğrenmek büyük ölçüde onlardan kaçınmayı öğrenmek demektir.

C Gerçekte Nerede Çalışıyor

C tarihsel bir merak konusu değildir. Bunu okuduğunuz cihazda, birkaç kez çalışıyor.

  • İşletim sistemleri. Linux çekirdeği kabaca 30 milyon satır C'dir. Windows'un ve Apple'ın çekirdeğinin büyük kısımları da C'dir.
  • Gömülü sistemler. Arabalardaki, termostatlardaki, tıbbi cihazlardaki, yönlendiricilerdeki ve çamaşır makinelerindeki mikrodenetleyiciler ezici çoğunlukla C ile programlanır. Tüm yongada 32 KB bellek varken C çoğu zaman tek gerçekçi seçenektir.
  • Veritabanları. SQLite, PostgreSQL, MySQL ve Redis birer C programıdır.
  • Dil çalışma zamanları. Referans Python yorumlayıcısı CPython C ile yazılmıştır. Ruby'nin MRI'ı, PHP'nin Zend motoru ve Lua'nın çekirdeği de öyle. Python "çok yavaş" olduğunda çözüm genellikle bir C uzantısıdır.
  • Araçlar ve kütüphaneler. Git, curl, FFmpeg, OpenSSL, zlib, yine SQLite - bilişimin altyapı katmanı C'dir.

C'nin uygulama ikili arayüzünün (ABI) önemli olmasının sebebi de budur: neredeyse her dil bir C fonksiyonunu çağırabilir. Python, Rust, Go, Java ve JavaScript'in hepsinin C kütüphanelerine uzanma yolu vardır. C, diller arasındaki ortak dildir.

Neden C Öğrenmeli

İki dürüst cevap var ve farklı insanlara işaret ediyorlar.

Sistemler üzerinde çalışmak istiyorsanız - çekirdekler, sürücüler, gömülü yazılım, veritabanları, oyun motorları - C, o alanın çalışma dilidir ve bu alanlardaki iş ilanlarının çoğu onu doğrudan anar (çoğu zaman C++ ya da Rust ile birlikte). Linux'a, PostgreSQL'e ya da bir mikrodenetleyici kod tabanına C'yi rahatça okumadan katkı vermek zordur.

Zaten kullandığınız dilde daha iyi olmak istiyorsanız, C size altta ne olduğunu öğretir. C'den sonra bir dizi indeksinin neden sıfırdan başladığını, bir metnin gerçekte ne olduğunu, büyük bir nesneyi değerle geçirmenin neden pahalı olduğunu, yığın ile öbeğin ne olduğunu ve boş bir göstericinin gerçekte neyi gösterdiğini bilirsiniz. Bu kavramlar her dilde belirir; C, gizli olmak yerine görünür oldukları yerdir.

O program üç satır C'dir ve aynı zamanda bir değişkenin ne olduğunun eksiksiz bir gösterimidir: bir adreste adlandırılmış bir kutu. Çoğu dilde o soruyu soramazsınız bile.

C ve C++

C++, 1979'da "sınıflı C" olarak başladı ve var olan en büyük dillerden birine dönüştü: sınıflar, şablonlar, istisnalar, operatör aşırı yüklemesi, STL, akıllı göstericiler ve C'nin tüm şartnamesini cüce bırakan bir standart kütüphane.

Pratikteki ilişki:

  • C++, C'nin söz dizimini korudu, dolayısıyla if, for, while, operatörler, göstericiler ve diziler ikisinde de aynı görünür.
  • İyi yazılmış C'nin çoğu C++ olarak derlenir, birkaç istisnayla (örneğin C++, malloc'un sonucunun dönüştürülmesini ister).
  • C++ kodu neredeyse hiçbir zaman geçerli C değildir.

İkisini de öğrenmeyi planlıyorsanız önce C öğrenmek gerçek bir avantajdır: C++ doğrudan C'nin bellek modeli üzerine kurulur ve C++'ın insanları en çok şaşırtan kısımları - göstericiler, referanslar, kopyalama anlambilimi, yıkıcılar - hepsi C'nin size açıkça gösterdiği sorunlara verilen cevaplardır.

Yine de C, resmi hiçbir anlamda C++'ın bir alt kümesi değildir. Ayrı ayrı gelişen ayrı standartlardır ve modern C'de C++'ta olmayan özellikler vardır (belirtilmiş ilk değerler C99'da geldi, restrict göstericileri ve değişken uzunluklu diziler).

Hangi C: Standart Sürümleri

C standartlaştırılmıştır ve eski kod okurken sürüm önemlidir.

StandartYılŞunun için bilmeye değer
C89 / C901989Kadim temel. Değişkenler yalnızca bir bloğun tepesinde bildirilir.
C991999// yorumları, değişkenleri her yerde bildirmek, stdbool.h ile bool, long long
C112011İş parçacıkları, atomikler, daha güvenli kütüphane fonksiyonları
C172018C11'in hata düzeltme sürümü - bugünün yaygın varsayılanı
C232024Anahtar kelime olarak true/false/bool, nullptr, ikili sabitler

Bu belgeler C17'yi hedefler ve C99+ özelliklerini önemli olduğu yerde belirtir. Derleyiciler modern bir şeyi varsayılan alır, ama açık olabilirsiniz:

gcc -std=c17 -Wall -Wextra hello.c -o hello

C'de Olmayanlar

C'yi anlamanın bir parçası neyin eksik olduğunu bilmektir, çünkü hemen her "nasıl yaparım..." sorusunun burada modern bir dildekinden farklı bir cevabı vardır.

  • Metin yok. Bir C metni, sıfır baytla biten bir char dizisidir. İkisini birleştirmek, bir fonksiyon çağırmak ve hedefin yeterince büyük olup olmadığını dert etmek demektir.
  • Koleksiyon yok. Liste, sözlük ya da küme yok. Sabit diziler ve göstericiler alırsınız; bir karma tablo, yazdığınız ya da bir kütüphane bağladığınız bir şeydir.
  • İstisna yok. Fonksiyonlar başarısızlığı özel bir değer döndürerek bildirir - -1, NULL ya da bir durum kodu - ve çağıranın denetlemesi beklenir.
  • Jenerik ya da aşırı yükleme yok. Bir fonksiyon adı bir fonksiyon demektir. Standart kütüphanede üç farklı tip için abs, labs ve fabs olmasının sebebi budur.
  • İsim alanı ya da modül yok. static olmayan her fonksiyon tek bir küresel isim alanını paylaşır; C kütüphanelerinin her şeyi öneklemesinin sebebi budur (sqlite3_open, png_read_info).
  • Çöp toplayıcı yok. Her malloc'un eşleşen bir free'ye ihtiyacı vardır ve unutmak bir bellek sızıntısıdır.

Bunların hiçbiri gözden kaçırma değildir. Bazıları C'nin taşımayı reddettiği çalışma zamanı makineleridir (bir çöp toplayıcı, istisna geri sarımı, büyüyebilen metinler) ve 2 KB RAM'i olan bir yongaya sığmasının büyük bölümü bundandır; ad alanları ve genel tipler gibi diğerleriyse C'nin tasarımından sonra gelen, dili küçük tutmak için dışarıda bırakılan dil özellikleridir.

Tampon 32 bayttır, çünkü yeterli olduğuna siz karar verdiniz. C denetlemez ve o karar, dilin tüm karakterinin tek bir satırdaki hâlidir.

C Zor mu?

C küçüktür ama affetmez. Ezberlenecek çok söz dizimi yoktur - tüm dili bir haftada okuyabilirsiniz. Zaman alan şey disiplindir: hangi bellek parçasının sahibinin kim olduğunu takip etmek, bir metnin yalnızca sıfırla biten baytlar olduğunu hatırlamak, bir göstericiyi izlemeden önce boş olmadığını denetlemek.

C'nin zorluğunun çoğu kavramlarında değil, korkuluklarının olmayışındadır: derleyici sizi sınır dışına yazmaktan ya da sarkan bir göstericiden kurtarmaz, dolayısıyla kesin olmayı öğrenirsiniz. (Göstericilerin kendisi ilk seferinde gerçek bir çaba ister - bu normaldir ve göstericiler bölümü onları ağırdan alır.) Bu kesinlik, sonradan kullanacağınız her dile aktarılan bir beceridir.

Sıkça Sorulan Sorular

C programlama dili nedir?

C, 1972'de Bell Labs'ta Dennis Ritchie tarafından oluşturulan, derlenen, genel amaçlı bir programlama dilidir. Size bellek üzerinde doğrudan denetim verir ve CPU'nun gerçekte yaptığına yakın biçimde eşlenir; işletim sistemlerinin, aygıt sürücülerinin ve veritabanlarının hâlâ onunla yazılmasının sebebi budur.

C bugün ne için kullanılıyor?

İşletim sistemi çekirdekleri (Linux, Windows ve macOS'un bazı kısımları), arabalardaki, ev aletlerindeki ve mikrodenetleyicilerdeki gömülü yazılımlar, SQLite ve PostgreSQL gibi veritabanları, CPython ve Redis gibi dil çalışma zamanları ve başka dillerin çağırdığı başarım açısından kritik kütüphaneler.

C 2026'da hâlâ öğrenmeye değer mi?

Evet, iki sebeple. Hâlâ sistem ve gömülü işlerin dilidir ki bu büyük ve iyi ücretli bir alandır. Ve belleğin, göstericilerin ve yığının gerçekte nasıl çalıştığını öğretir - bu bilgi sizi diğer her dilde daha iyi yapar, çünkü çoğu C ile gerçeklenmiştir.

C ile C++ arasındaki fark nedir?

C++, "sınıflı C" olarak başladı ve C'nin söz diziminin çoğunu korurken nesne yönelimli programlamayı, şablonları, standart kütüphaneyi ve çok daha fazlasını ekledi. C çok daha küçüktür: sınıf yok, istisna yok, jenerik yok. Geçerli C'nin çoğu C++ olarak derlenir, ama tersi geçerli değildir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA