C (programlama dili)
AT&T Bell laboratuvarlarında, Ken Thompson ve Dennis Ritchie tarafından UNIX İşletim Sistemi' ni geliştirebilmek amacıyla B dilinden türetilmiş yapısal bir programlama dilidir. Geliştirilme tarihi 1972 olmasına rağmen yayılıp yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin (Microsoft Windows, GNU/Linux, *BSD, Minix) yapımında %95' lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir." Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.
Paradigması | Zorunlu (yordamsal), yapısal |
---|---|
İlk çıkışı | 1972 |
Tasarımcı | Dennis Ritchie |
Geliştirici |
Aslen: Dennis Ritchie & Bell Labs ANSI C: ANSI X3J11 ISO C: ISO/IEC JTC1/SC22/WG14 |
Kararlı sürüm |
C99 (Mart 2000) |
Önizleme sürümü | C1X |
Tip sistemi | zayıf, statik, belirgin |
Önemli uygulamaları | Clang, GCC, MSVC, Turbo C, Watcom C |
Lehçeleri | Cyclone, Unified Parallel C, Split-C, Cilk, C* |
Etkilendikleri | B (BCPL, CPL), ALGOL 68, Çevirici, PL/I, FORTRAN |
Etkiledikleri | Birçok: AMPL, AWK, csh, C++, C-- , C#, Objective-C, BitC, D, Go, Java, JavaScript, Limbo, LPC, Perl, PHP, Pike, Processing, Python, Comfy |
İşletim sistemi | Çapraz platform |
Olağan dosya uzantıları | .h .c |
C Dilinin geçmişi
C Dilinin erken tarihi
C'nin ilk gelişme safhaları 1969 ile 1974 arasında AT&T Bell 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 dili yorumlanan bir dildi ve veri tipi desteği yoktu. Yeni donanımların farklı veri tiplerini desteklemesi, ve yorumlanan dillerin çalışma zamanında görece yavaş olması sebebi ile, C dili, tip desteği eklenmiş ve derlenen B olarak geliştirildi.
"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/20 assembly 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.
C dilinin geçmişi
1978'de Ritchie ve Brian Kernighan The C Programming Language (C Programlama Dili) kitabının ilk baskısını yayımladılar.[1] C programcıları tarafından "K&R" olarak bilinen bu kitap, yıllar boyunca C dilinin gayriresmî standardı olarak kullanıldı. C'nin bu sürümü bugün "K&R C" olarak adlandırılır. Bu kitabın ikinci baskısı ise aşağıda anlatılan ANSI C standardını içerir.[2]
K&R dilde şu değişiklikleri yaptı:
struct
veri tipleri eklendilong int
veri tipi eklendiunsigned int
veri tipi eklendi=+
operatörü+=
olarak değiştirildi
K&R C genellikle tüm C derleyicilerinin desteklemek zorunda olduğu dilin en temel kısmı olarak kabul edilir. Uzun yıllar boyunca, ANSI C'nin kabul edilişinden sonra bile, yüksek taşınabilirlik ((İngilizce) portability) istendiğinde, K&R C, C programcıları tarafından "ortak payda" olarak kabul edilmiştir çünkü bazı derleyiciler henüz ANSI C'yi desteklemek üzere güncellenmemişlerdi ve zaten iyi yazılmış bir K&R C programı aynı zamanda ANSI C'yi de destekliyordu.
K&R C'nin yayımlanmasını izleyen yıllar içine dile AT&T'nin derleyicilerinin ve bazı başka bilgisayar üreticileri tarafından desteklenen kimi "gayriresmî" özellikler eklendi. Bunların içinde aşağıdaki özellikler de vardı:
void
fonksiyonlar vevoid *
veri tipistruct
ya daunion
veri tipi döndüren fonksiyonlar- her bir
struct
'ın alan adları için ayrı bir ad alanı struct
veri tipleri için atama- bir nesneyi yazmaya karşı korumalı yapmak için
const
anahtar sözcüğü - standart bir C kütüphanesi
- enumeration'lar
- single-precision
float
tipi
ANSI C ve ISO C dilleri
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 "gayriresmî" ö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 standardı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:
- for ve bunun gibi yineleme ifadelerinde parantez içi ilk deklarasyonlara izin verilmesi
Örneğin for(int i=0; i<10; i++)
deyimi c99 da geçerli iken c89 da geçerli değildir...
- 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.
"Merhaba, dünya" örneği
Merhaba, dünya örneği ilk olarak The C Programming Language kitabının birinci baskısında kullanıldı ve birçok programlama kitabında kullanılan tanıtıcı örnek haline geldi. Bu örnek ekrana ya da terminal ekranına "merhaba, dünya" yazar.
Kitaptaki kodun orijinal hali:
#include <stdio.h>
main()
{
printf("merhaba, dünya\n");
}
Standart olarak onaylanan "merhaba, dünya" versiyonu:
#include <stdio.h>
int main()
{
printf("merhaba, dünya");
return 0;
}
1. satır : Bir önişlemci komutudur ve daha program derlenmeden önce devreye girerek istenilen değişiklikleri kaynak dosya üzerinde gerçekleştirir. Bu programda stdio.h
(standart input-output) başlık dosyasını programa dahil eder. Bu başlık dosyasında standart giriş-çıkış fonksiyonlarının prototipleri mevcuttur. Burada programdaki komutun amacı printf
fonskiyonunu programa dahil etmektir.
2. satır : Bu satırda programda işe main
fonksiyonun tanımlanmasıyla başlanmıştır. main
fonksiyonun C dilinde özel bir amacı vardır. Programın çalışma zamanında başladığı yer main fonksiyonudur.
3. satır : main
fonksiyonunun başladığı yeri belirtir.
4. satır : Bu satırda "merhaba, dünya" yazısını (karakter dizisini) ekrana bastırmak için printf
fonksiyonu çağrılır ki bu fonksiyonu 1. satırdaki stdio.h
başlık dosyası ile programa dahil etmiştik.
5. satır : return
kodu main fonksiyonumuzu 0
geri dönüş değeriyle sonlandırır.
6. satır : main
fonksiyonunun bittiği yeri belirtir.
İlgili diller
C, doğrudan veya dolaylı olarak pek çok dili etkilemiş ve örnek olmuştur.
Kaynakça
- Kernighan, Brian W.; Ritchie, Dennis M. (Şubat 1978). C Programlama Dili (1. bas.). Englewood Cliffs, NJ: Prentice Hall. ISBN 0-13-110163-3.
- Kernighan, Brian W.; Ritchie, Dennis M. (Mart 1988). C Programlama Dili (2. bas.). Englewood Cliffs, NJ: Prentice Hall. ISBN 0-13-110362-8.
Dış bağlantılar
- ISO C Working Group resmî web sitesi12 Şubat 2018 tarihinde Wayback Machine sitesinde arşivlendi.
- comp.lang.c Sıkça Sorulan Sorular25 Şubat 2009 tarihinde Wayback Machine sitesinde arşivlendi.
- ISO/IEC 9899 resmî C99 belgeleri23 Mayıs 2015 tarihinde Wayback Machine sitesinde arşivlendi. sasa
- Coding Programmer Page / C Library Reference and Examples21 Ocak 2013 tarihinde Wayback Machine sitesinde arşivlendi. (english)