Bu bölüme başlamadan önce, C programlama dilinin gelişim tarihine kısaca bir göz atalım. Daha sonra, bir C programının temel yapısını oluşturan elemanları, en basit program yapısından itibaren basamak basamak ilerleyerek incelemeye çalışacağız.
C dilinin temelleri Martin Richards tarafından geliştirilen BCPL adlı dil ile atılmıştır. Sonra, BCPL dilinden esinlenerek, Ken Thompson B adlı dili oluşturmuştur. B dili, C dilinin oluşturulmasında bir basamak olarak kullanılmıştır. Daha sonra ise, C dili Brian Kernighan ve Dennis Ritchie tarafından geliştirilmiştir.
C dili içinde kullanılan standartlar 1983 yılına kadar, yine Brian Kernighan ve Dennis Ritchie tarafından yazılan "The C Programming Language" adlı kitapta belirlendiği şekilde uygulanmıştır. Zamanla daha yaygın bir şekilde kullanılmaya başlayan C için gereksinim duyulan yeni standartları belirlemek amacıyla 1983 yılında toplanan bir komite, ANSI C standartları adı verilen standartları oluşturmuştur. Burada kullanılan ANSI kelimesi "American National Standart Institute" kelimelerinin kısaltılmış şeklidir. 1983 yılından itibaren, C programlama dili için bütün dünyada ANSI C standartları uygulanmaya başlamıştır.
Günümüzde C dilinin bu sürümü "ANSI C" veya "C89" adı ile anılır.
ANSI C standartlarının belirlenmesinden sonra, piyasaya sürülen bütün C derleyicileri bu özelliği sağlayacak şekilde hazırlanmıştır. 1990 yılında, ANSI C ISO (International Organization for Standardization) tarafından, birkaç küçük değişiklik yapılarak, ISO/IEC 9899:1990 adıyla yeniden uyarlandı. Bu sürüm "C90" adıyla anılmaktadır.
2000 yılında ise, ANSI ISO/IEC 9899:1990 standardını yeniden uyarlayarak "C99" adı verilen bir standart yayınladı.
08.12.2011 tarihinde yayınlanan C11 standartları ile C Programlama diline ve kütüphanesine yeni özellikler eklenmiştir. Bu sürümle C++ Programlama Dili ile uyumluluk geliştirilmiştir. C programlama dilinin günümüzde kullanılmakta olan en son standart şeklidir.
Haziran 2018 tarihinde yayınlanan C17 C Programlama dilinin aktif standardıdır. Bu standart yeni özellikler eklememiş, sadece C11'deki hatalara ilişkin teknik düzeltmeler ve açıklamalar getirmiştir.
Sürüm | Standart | Yayın tarihi |
---|---|---|
K&R | - | 1978 |
C89 | ANSI X3.159-1989 | 1989 |
C90 | ISO/IEC 9899:1990 | 1990 |
C95 | ISO/IEC 9899/AMD1:1995 | 1995 |
C99 | ISO/IEC 9899:1999 | 1999 |
C11 | ISO/IEC 9899:2011 | 2011 |
C17 | ISO/IEC 9899:2018 | 2018 |
Assembler yoluyla Assembly dilinde yazılmış kodları makine kodlarına çevirerek kullanabiliriz. Ancak, Assembly dilinde kod yazarak programlama yapmak zor olduğu ve uzun bir uğraş gerektirdiği için, günümüzde kullanılmakta olan yüksek seviyeli diller (Basic, Fortran, Pascal gibi) oluşturulmuştur. Yüksek seviyeli diller program yapma işlemini daha kolay ve hızlı bir hale getirmiştir. Ancak, bu kez yapılan programların etkinliği azalmıştır. C dili, Assembly dilinin gücü ile yüksek seviyeli dillerin hızlı ve kolay programlama yapabilme özelliğini birleştirerek, kullanıcılar için oldukça pratik bir ortam sağladığından, her geçen gün biraz daha rağbet görmüştür.
Orta seviyeli bir programlama dili olarak kabul edilen C ile bilgisayar için işletim sistemi, derleyici ve aygıt sürücüsü (device driver) de dahil olmak üzere hayalimizin ulaşabileceği tüm programları yazabiliriz.
Yapısal bir dil olduğundan düzenli ve anlaşılır bir kod yazımına olanak sağlar.
Çok yaygın bir kullanıcı kitlesine, dolayısıyla desteğe sahiptir. Ücretsiz olarak sunulan derleyicileri ve geliştirme ortamlarını rahatlıkla elde edebiliriz.
Internet üzerinden rahatlıkla ulaşarak bilgi ve destek alabileceğimiz sürekli aktif haber grupları ve forumlar vardır.
C dilinde yazdığımız bir program, Assembly dilinin aksine, bütün bilgisayarlarda çalışacak şekilde hazırlanır.
C dili öğrendiğimizde nesneye dayalı (object oriented) ve görsel nesneye dayalı (visual object oriented) programlama dillerini daha rahat öğrenebiliriz. Bu programlama dillerinde bir sorun yaşadığımızda, çözüm sağlamak daha kolay olur. Eğer direk olarak görsel programlama dilleri öğrenirsek, kodlama konusunda sıkıntılar yaşayabiliriz. Nesneye dayalı programlama dillerine örnek olarak C++, Java, Javascript, Php ve nesneye dayalı programlama dillerine örnek olarak C++ Builder ve Visual C++ gösterilebilir.
Programlama dil grubu | Programlama dili |
---|---|
Yapısal programlama dilleri | C |
Nesneye dayalı programlama dilleri | C++ |
Java | |
Python | |
Javascript | |
Php | |
Nesneye dayalı görsel programlama dilleri | C++ Builder |
Visual C++ |
Pratik uygulamalara geçmeden önce, son olarak derleyici ve yorumlayıcı programlama dilleri arasındaki farkı kısaca gözden geçirelim.
Bazı programlama dillerinde yazılan programlar (kaynak kodları) birazdan anlatılacak olan derleme ve bağlama (link) işlemleri sonrasında makina kodlarına (ikili sayı sistem kodu) çevrilir ve .exe uzantılı bir dosya elde edilir. Elde edilen bu dosya hangi bilgisayarda olursa olsun, ek bir program yüklemeden, çalıştırılabilir. C, derleyici programlama dilleri olarak adlandırılan bu grubun içinde yer almaktadır.
Diğer grup ise yorumlayıcı programlama dilleri olarak adlandırılmaktadır. Bu dillerde yazılan programların çalışabilmeleri için kaynak kodlarının bir yorumlayıcı tarafından yorumlanması gerektiğinden, programın çalışacağı her bilgisayara ayrıca yorumlayıcı bir program yüklenmelidir. Yorumlayıcı programın kaynak kodunu satır satır makine koduna çevirerek çalıştırır. Java programlama dili bu gruba örnek olarak gösterilebilir.
Derleyici programı bir kez derlendikten sonra makina kodlarına çevrildiğinden, yorumlayıcı program ise her çalıştığında yorumlanması gerektiğinden, derleyici program daha hızlı çalışır.
C programlama dili ile program yazmak ve çalıştırmak için bir önceki bölümde bahsi geçen entegre geliştirme ortamlarından birine ihtiyacımız olacaktır. Aşağıdaki adreste gösterilen IDE'lerden birini bilgisayarımıza kurabiliriz:
C ve C++ Entegre Geliştirme Ortamları
Burada yer alan bütün örnekleri açık kaynak kodlu CodeBlocks IDE (Entegre Geliştirme Ortamı) ile derleyip çalıştıracağız. Bu programı aşağıdaki adresten indirip kurabiliriz: