Temel C Programlama -6- C Diline Giriş

Temel C Programlama derslerimizin altıncısında C diline giriş yaparak devam ediyoruz. C diline güzel bir giriş yaparsak C dilinde ilerlemek daha kolay olacaktır. Çünkü C dilini anahtar kelimeler, kurallar ve fonksiyonlar bütünü olarak telakki etmek programlama dillerini anlamakta bize fayda sağlamayacaktır. Daha önceki yazılarımız da C dilini doğru biçimde anlamanız için yardımcı niteliktedir. Şimdi C dilinin anahatlarından bahsederek dile geçiş yapalım.

C dili genel maksatlı bir programlama dilidir. Genel maksatlı bir dil olmasının önemli bir yanı vardır. Bazı diller belli amaçlara yönelik üretilmiş dillerdir. Örneğin FORTRAN dili matematik ve bilimsel hesaplamalara yönelik çıkarılmış bir programlama dilidir. Bazı programlama dilleri genel maksatlı olsa bile bazı platformlar ve sektörler ile sınırlandırılmıştır. Örneğin Ada dili havacılıkta, Objektif-C dili ise Apple ürünlerine program yazmada kullanılır. C dili ise gerçek manada genel maksatlı bir programlama dilidir. Ne bir platforma ne de bir sektöre bağlıdır. C dili ile hemen her alanda her programı yazma imkanımız vardır. Hatta C dili ile programlama dilleri bile yazılmaktadır. Bunun tersi ise amaca yönelik (domain specific) programlama dilidir.

C dili emirli (inperative) bir dildir. Yani C dilinde her yazdığımız komut satır satır emirlerden oluşmaktadır. Makine veya Assembly dilinde olduğu gibi C dilinde de belli bir program akışına göre bu sırasıyla bu emirler işletilir. Dikkat edilmesi gereken nokta bu emirlerin işin bütün ayrıntılarını içermesidir. Emirli dillerin karşısında tanımlamalı diller bulunur. Bu dillerde program yazarken işin iç yüzünden çok belli amaca göre kodlanmış program parçaları kullanılır. Örneğin emirli bir programlama dilinde şöyle bir komut işletilir. [1]

  • Kapıyı 80 cm ileri doğru ittir

Tanımlamalı dilde ise şu şekilde olur,

  • Kapıyı Aç

C dili yapısal bir programlama dilidir. Bunun karşısında nesne tabanlı programlama dillerini sayabiliriz. Yapısal programlama dili olması bizi donanıma daha yaklaştırmaktadır. Çünkü makine dilinde komutlar sırayla işletilir, belli mantıksal işlemler yapılır, belli bloklar olur ve bu bloklar arasında alt yordam (subroutine) adı verilen program akışı gerçekleşir. Yapısal programlamada da nesne ve sınıflar gibi alt seviye dillerden ve program mantığından uzak parçalar yoktur. O yüzden C dilinde program yazan birisi çok ileri programlama yöntemleriyle uğraşmaz. Basit ve etkili program yazar. Bu bakımdan C dilini öğrenmek C++, C# gibi nesne tabanlı dilleri öğrenmekten daha kolaydır. Yapısal programlama dilleri üç elementten oluşmaktadır. Bunlar kontrol yapıları, alt yordamlar ve bloklardır. Yapısal programlama dillerini algoritma akış diyagramlarına uyarlamak çok kolaydır. Yalnız program kalabalıklaştıkça (karmaşıklaştıkça demiyorum) yapısal programlama dillerinde program yazmak zorlaşmaktadır. O yüzden nesne tabanlı programlama dilleri ortaya çıkmıştır.

C dili prosedürel bir programlama dilidir. Prosedürel programlama yapısal programlamadan türetilmiştir. Prodesürel programın temelleri alt yordamlar, yordamlar (routine) ya da fonksiyonlardır. Bu fonksiyonlar ifadelerin (statement) bir araya getirilmesinden meydana gelen program bloklarıdır ve bu program blokları arasında bir akış ve atlama ile program çalışmaktadır. Bu programlama yönteminde modülerlik ve kapsam önemli bir yerdedir. Modülerlik büyük programı küçük parçalara ayırıp kullanmak anlamı taşırken kapsam ise bu prosedürleri modül halinde tutmaya yardımcı olmaktadır. Bunları daha ilerleyen konularda uygulamalı olarak göstereceğiz.

C dili alt seviye ve üst seviye programlama arasında bir köprüdür. Donanım seviyesi bakımından bu kadar esnekliği sağlaması C dili ile hem performanslı hem de karmaşık uygulamaları yapma imkanı vermektedir. Pek çok oyun motoru ve donanımın sınırlarını zorlayan program C/C++ dilinde yazılmaktadır. C dili hafızaya adres adres erişebildiği gibi bit operatörleri ile bitlerine müdahalede bulunmamıza olanak sağlamaktadır. O yüzden çoğu zaman Assembly dilini aratmamaktadır çünkü donanım ne yapabiliyorsa biz bunu C dili ile yapabiliriz. Eksik komut olması, kütüphane zorunluluğu gibi meseleler burada yoktur. Fakat performans konusunda ve hassas noktalarda yine Assembly dilini kullanmamız gerekebilir. Buna da büyük oranda ihtiyaç duymayız.

C dili kullanım alanı en geniş dillerden biridir. Tarih boyunca C dilinde onlarca farklı işletim sisteminde, yüzlerce farklı donanımda program yazılmıştır. Basit bir ev bilgisayarından süperbilgisayarlara kadar. Basit programlardan bilimsel hesaplamalara kadar her alanda C dilinin kullanıldığını görebiliriz. Örneğin C# dili Windows platformunda çalışmakta, Objective-C dili ile Apple cihazlarına program yazılmaktadır. C dilinde ise böyle bir sınırlama yoktur. C dilinde oyun, metin işleme programı, otomasyon programış işletim sistemi, kontrol programı gibi onlarca kullanım alanı ve sektöre yönelik program tipleri yazılabilir. Yalnız bazı alanlarda C dilinin pratiği yoktur. Örneğin Web programcılığında C değil de PHP dili kullanılır. Fakat PHP dilinin C dili ile yazılmış olduğunu hatırlatalım.

C dilinin tarihine baktığımızda Dennis Ritchie tarafından 1972-1973 yıllarında Bell Laboratuvarlarında geliştirildiğini öğreniyoruz. Bu programlama dilinin geliştirilmesi Unix işletim sistemi yazılırken olmuştur. Çünkü Assembly dili ile tam kapsamlı bir işletim sistemini yazmak aşırı derecede zordur ve işin içinden çıkılmaz noktaya varılır. C dili Unix işletim sisteminin yazılmasında ve bu işletim sistemine yönelik araçların geliştirilmesinde yardımcı olmuştur. C dili ilk geliştirildiği zamanlar daha bir standarta sahip olmadığı için popülerlik kazanması 1990’ların başına kadar uzamıştır. Bunun bir sebebi de C dilinde program geliştirmek yerine Assembly dilinde program geliştirmenin zorunluluğudur. Bu zorunluluğun ortaya çıkmasında donanımların yeteri kadar güçlü olmaması ve C gibi performanslı dilin bile bu donanımlar için optimal programı ortaya çıkaramamasıdır. Hatta 1993 yılında çıkan ve çıktığı zamana göre grafik olarak hem yeni bir teknoloji hem de büyük ilerleme getiren DOOM oyunu sadece C dili ile yazılmış değildir. Oyunun kaynak kodlarını ID software günümüzde paylaşmıştır. Oyunun kaynak kodlarını incelediğimizde C ile Assembly dilinin beraber ve etkin bir kullanımını görürüz.

C dilinin performans ve esnekliği sayesinde ileri seviye programlar yazılabilir. Bunlar C#, Python gibi dilleri kullanan geliştiricilerin ilgisini çekmese de alt seviye programcıların ilgisini bir hayli çekmektedir. Örneğin işletim sistemleri, gömülü sistemler, gerçek zamanlı sistemler ve iletişim sistemleri gibi hassas ve kritik uygulamaları alt seviye programcılar yapmaktadır. Bunları kütüphane fonksiyonlarını ezberleyip kullanan programcıların yapmasının imkanı yoktur. O yüzden C programlama dili ile ezbere ve kopyala-yapıştır programcılık yapmanın imkanı yoktur.

C dili günümüzde kullanılan dillere öncü olmuştur. Şu an kullanılan Objective-C, C#, Java ve C++ dillerinin atası C programlama dilidir. O yüzden C programlama dilini öğrenen birisi bu dilleri öğrenmekte zorluk çekmez. Yani hem gömülü sistemler üzerinde çalışma hem de bu bilgiyle daha yüksek seviye ortamlarda çalışma imkanı buluruz. Yüksek seviyenin her zaman en iyi olmadığını şimdiye kadar anlamış olmanız gerekir.

Bu noktada sizlere C dilini anahatlarıyla tanıtmış olduk. Bir sonraki makalede C diline ait diğer özellikleri ve geliştirme ortamlarını sizlere anlatacağız.

Kaynaklar,

[1} Emirli Programlama (Imperative Programming), Şadi Evren ŞEKER, http://bilgisayarkavramlari.sadievrenseker.com/2009/11/16/emirli-programlama-imperative-programming/, Erişim Tarihi 28.02.2019

Last updated