1970'lerin başında Ken Thompson ve Dennis
Ritchie tarafından UNIXişletim sistemi için geliştirilmiş bir
programlama dilidir. , günümüzde neredeyse tüm işletim sistemlerinde
kullanılan, dünyanın en çok kullanılan sistem programlama dilidir.
Ancak, uygulama programları yazmak için de çok sık kullanılır. Yine çok
kullanılan programlama dillerinden olan C++ da C'den türemiş bir dildir.
Özellikleri
C oldukça minimalist bir dildir ve diğer pek çok programlama dilinden
daha düşük düzeylidir. Çoğu zaman, C'nin düşük düzeyli bir dil olduğu
ya da bir yüksek seviye assembler olduğu söylenir. Her ne kadar bazan
bir yüksek düzeyli dil olduğu söylense de, gerçekte C, yalnızca
assembly dillerinden daha yüksek düzeylidir.
C'nin assembly'ye göre iki önemli avantajı vardır: İlk olarak, C kaynak
kodunu okuması daha kolaydır, ve özellikle uzun programlar için,
yazması da çok daha zahmetsizdir. İkinci olarak, bir assembly programı
genellikle yalnızca tek bir makina çeşidi üzerinde çalışabilirken, C
programları (bir C derleyicisi ve gerekli kütüphaneler varsa) başka
sistemlerde de çalışmak için derlenebilirler. Öte yandan, bir C
programının performansı derleyicinin makina kodunu eniyileme başarısına
bağlıdır, ki bu da programcının denetimi dışındadır. Assembly
programlarının performansı ise doğrudan programcı tarafından
belirlenir, çünkü bir assembly programı aslında bir makina dilinin
insanlar tarafından daha kolay okunabilir biçimidir. Bu yüzden, bazı
programların (örneğin işletim sistemlerinin) yüksek performans
gerektiren bölümleri assembly ile yazılırlar. Yine de, özellikle modern
mimariye sahip işlemciler için, C derleyicilerinin eniyileyerek
ürettiği assembly, elle yazılmış assembly'den hızlıdır.
Benzer avantajlar ve dezavantajlar C'yi yüksek düzeyli dillerden
ayırır: bir C programının verimliliği daha iyi kontrol edilebilir,
ancak C programlarını yazmak ve okumak daha zordur. Yine de dikkat
edilmelidir ki, C en az yüksek düzeyli diller kadar taşınabilirdir,
çünkü günümüzde çoğu bilgisayar sisteminde bir C derleyicisi vardır;
aslında, yüksek düzeyli dillerin pek çoğunun derleyicileri,
kütüphaneleri ve yorumlayıcıları C ile yazılmışlardır.
C'nin önemli özelliklerinden biri de bilgisayar belleğinin kullanımının
programcı tarafından ayarlanmasıdır. Standart C otomatik bellek
kullanımını sağlamak için hiçbir araç içermez, ve dizi sınırları (İng.
array bounds) kontrol edilmez. Ancak, C'den türemiş olan Java ve C#
gibi diller otomatik bellek yönetimine izin verirler. Her ne kadar
C'nin bellek yönetimini programcıya vermesi programın performansının
ayarlanmasında programcıya daha çok olanak verse de, bu, programcılık
hatalarının artmasına da neden olur. Bu tür hatalar, bilgisayar
güvenliğini düşürmeleri ile ün kazanmışlardır. Bu bellek yönetimi
hatalarının önüne geçilebilmesi için pek çok araç üretilmiştir (örneğin
dizi limitlerini kontrol eden ve otomatik çöp toplama [garbage
collection] yapan kütüphaneler, lint gibi otomatik kaynak kodu kontrolü
yapan programlar).
C'nin bazı özellikleri aşağıda sıralanmıştır:
Çok basit bir temel dil (çekirdek dil). Elzem olmayan işlevler bir standart kütüphaneler kümesi tarafından sağlanır.
Prosedürel programlamaya verilen özel önem. Yapısal programlama da kolaylaştırılmıştır.
C önişlemcisi: Makro tanımlamak ve kaynak kodu dosyalarını birleştirmek için kullanılır.
İşaretçiler aracılığı ile bilgisayar belleğine doğrudan erişim
(anlamsal açıdan yanlış işlemler derleyici tarafından engellenmezler)
Parametreler fonksiyonlara referansları ile değil, değerleri ile geçirilirler
Lexical variable scoping
Dilin Tarihi
C'nin ilk gelişme safhaları 1969 ile 1973 arasında AT&TBell
Laboratuvarları'nda gerçekleşti. Ritchie'ye göre, en yaratıcı devre
1972 idi. Dilin pek çok özelliği "B" adlı bir dilden türediği için,
yeni dile "C" adı verildi. "B" adının kökeni konusunda ise söylentiler
değişik: Ken Thompson B'nin BCPL programlama dilinden türediğini
söylemektedir, ancak Thompson eşi Bonnie'nin onuruna adını Bon koyduğu
bir programlama dili de geliştirmiştir.
1973'e kadar C yeterince güçlü bir hale gelmiş ve ilk başta
PDP-11/20assembly dili ile yazılan UNIX'in çekirdeğinin büyük kısmı C
ile yeniden yazılmıştı. Böylece UNIX, çekirdeği bir assembly dili ile
yazılmayan ilk işletim sistemlerinden biri olmuştu.
ANSI C ve ISO C
1970'lerin sonunda C, en çok kullanılan mikrobilgisayar dili olarak
BASIC'in önüne geçmeye başladı. 1980'lerde ise, IBM PC ile kullanılmak
üzere benimsenmesiyle birlikte popülaritesi iyice artmaya başladı. Aynı
zamanda, Bell Laboratuvarları'nda Bjarne Stroustrup ve iş arkadaşları
C'ye nesneye yönelim eklemek üzere çalışmaya başlamışlardı. C bugün
UNIX dünyasında en çok kullanılan dil olarak kalırken, Stroustrup'un
geliştirip C++ adını verdiği dil Microsoft Windows işletim sisteminde
en önemli dil oldu.
1983'te Amerikan Ulusal Standartlar Enstitüsü (ANSI) bir C standardı
oluşturmak için bir kurul oluşturdu. Uzun ve yorucu bir çalışmadan
sonra, bu kurul standardı 1989'da tamamladı ve standart ANSI
X3.159-1989 "Programming Language C (C Programlama Dili)" olarak
yayımlandı. Dilin bu versiyonu genellikle ANSI C olarak adlandırılır.
1990'da bu standart, küçük değişikliklerle Uluslararası Standartlar
Örgütü (ISO) tarafından da benimsenip ISO/IEC 9899:1990 olarak
yayımlandı.
ANSI C'yi oluşturmanın amaçlarıdan biri K&R C'yi içeren ve dile
sonradan katılan "gayriresmi" özellikleri de dile katan bir standart
oluşturmaktı. Standart k fonksiyon prototiplerini ve daha yetenekli bir
önişlemciyi de standarda ekledi.
Bugün artık ANSI C neredeyse tüm derleyiciler tarafından
desteklenmektedir. Günümüzde yazılmakta olan C programlarının çoğunluğu
ANSI C stardarına uygun olarak yazılmaktadır. Yalnızca standart C
kullanılarak yazılmış bir program, standarda uyumlu her derleyici ile
doğru bir biçimde derlenip çalıştırılabilir. Ancak, standart olmayan
kütüphaneler kullanılarak yazılmış programlar belli bir platform ya da
derleyici gerektirebilirler
C99
ANSI standartlaştırma işleminden sonra C dili uzun bir süre oldukça
sabit kaldı, ancak C++ gelişmeyi sürdürdü. Buna bağlı olarak,
1990'ların sonunda ISO standardı güncellendi ve 1999'da ISO 9899:1999
olarak yayımlandı. 2000 yılının Mart'ında ise, "C99" olarak bilinen bu
standart ANSI tarafından da benimsendi.
C99'un yeni özellikleri şöyle özetlenebilir:
inline fonksiyonlar
C++'da olduğu gibi artık değişkenler programın herhangi bir yerinde tanımlanabilirler
long long int, boolean, complex gibi yeni veri tipleri
değişken uzunluğa sahip diziler
C++'dan alınan, // ile başlayan tek satırlık program içi açıklamalar
snprintf() gibi yeni kütüphane fonksiyonları
stdint.h gibi yeni başlık dosyaları
C99'u bugün GCC ve bazı başka derleyiciler desteklemekteyken, Microsoft
ve Borland derleyicilerine C99 desteği eklemekte isteksiz
davranmaktadırlar
C'de "Merhaba dünya!" programıAşağıdaki basit program, standart çıktıya
"Merhaba dünya!" sözcüklerini yazar. Bu programın bir versiyonu ilk kez
K&R'de basılmıştır
#include
int main( **** )
{
printf( "Merhaba dünya!\n" );
return 0;
}