C Programı Derleme ve Çalıştırma Evreleri

C programlarının derlenerek çalıştırılabilir hale getirildiğini söylemiştik. Peki tipik bir C programı hangi aşamalardan geçerek çalıştırılabilir hale gelir? Windows ve GNU/Linux tipi işletim sistemlerinde çalıştırılabilir dosya kavramları farklıdır. Windows’ta ".exe" uzantılı dosyalar çalıştırılabilir dosya olarak ele alınırken, Linux çekirdeğini kullanan işletim sistemlerinde dosya uzantıları sadece semboliktir. Yani her işletim sisteminde bu aşamalar değişse de genel anlamda ortaya çıkan aşamalar üzerinden anlatım yapılabilir.

C programları genel olarak 6 aşamadan geçerek çalıştırılabilir hale gelirler. Bu aşamalar: düzenleme(editing), ön işleme(preprocessing), derleme(compilation), bağlama(linking), yükleme(loading) ve çalıştırmadır(executing). Şimdi bu kısımların kavramsal olarak üzerinden geçelim.

Aşama 1: Düzenleme

Bu aşamada C dili ile yazacağımız dosyanın oluşturulması ve düzenlenmesi yapılır. Sonuçta bu dili bir yerlere yazıp kaydetmeden üzerinde herhangi bir işlem yapamayız. Bu nedenle önce bir metin dosyası oluşturup bunun içine kodlarınızı yazmalısınız. Bu aşama için herhangi bir işletim sisteminde varolan herhangi bir metin editörünü (text editor) kullanabilirsiniz. Sonuçta tıpkı bir doküman yazıyor gibi kod yazacaksınız. Fakat yazdığınız kodun boşlukları ve düzeni, kodun okunabilirliğini etkileyeceğinden C dilinin yazım düzenini destekleyen bir metin editörü tercih etmeniz sizin için daha faydalı olacaktır.

Bir başka konu ise hata kontrolüdür. Dilin sözdiziminde yapılan bir hatayı bu aşamada tespit etmek normal metin editörlerinde oldukça zordur. Bu nedenle C dilinin yazılma esnasında hata kontrolünü yapabilen editörler tercih edilebilir. Bütün bu özellikleri bir arada bulunduran ve birazdan anlatacağımız derleme ve bağlama işlemlerini de gerçekleştirebilen gelişmiş metin editörleri piyasada bulunmaktadır. Bu tip editörler aslında bir metin editöründen daha fazla şeyi ifade ederler ve bunlara IDE (Integrated Development Envitonment – Tümleşik Geliştirme Ortamı) adı verilir. Bu tip programlara Eclipse, Netbeans ve Visual Studio örnek olarak verilebilir. Bu programlara istediğiniz bir derleyici veya bağlayıcı programın atamasını yapabilirsiniz.

Microsoft Visual Studio Geliştirme Ortamı
Figür 1: Microsoft Visual Studio Geliştirme Ortamı

Bir C programı yazdığınızda onun C programı olduğunu belirtmek için sonuna ".c" uzantısı koyarak kaydederiz. Aynı şekilde bir sonraki derste bahsedeceğimiz başlık dosyaları da ".h" uzantısını almaktadır.

Aşama 2: Ön İşleme

Normalde bir dili yazdıktan sonra derlemeye çalıştığınızda, derleyici yazdığınız kodu makine dilindeki bir koda dönüştürür. Fakat C diliyle çalışırken derleyici önce ön işleme (preprocessing) adı verilen bir işlemi gerçekleştirir. Bu konunun detaylarına ileriki yazılarda girilecek olsa da kısaca ön işleme dediğimiz şey C dilinde "#" işareti ile başlayan satırların belirli sembollerle yer değiştirilmesidir. Ön işleme işlemiyle bu satırlardan arındırılan C kodu derleme aşamasına gönderilir. Bu satırlara önişlemci bildirimleri (preprocessor directives) adı verilirken, bu satırları belirli C kodları ile yer değiştirmeye yarayan programa önişlemci (preprocessor) adı verilir.

Aşama 3: Derleme

Derleme aşamasında C programı makine koduna çevrilir. Eğer çevirme sırasında dilin kurallarını ihlal eden satırlar varsa, bu satırlar söz dizimi hataları (syntax errors) olarak geliştiriciye gönderilir ve derleme işlemi iptal edilir. Bu hatalardan yola çıkarak geliştirici sorunları çözer ve kodu yeniden derlemeye çalışır. Derleyici tarafından bize iletilen hata mesajlarının standart bir formatı yoktur. Bu mesajların formatı derleyiciden derleyiciye değişmektedir. Söz dizimi hataları ayrıca derleme hataları (compile errors) veya derleme zamanı hataları (compile time errors) olarak da adlandırılmaktadır.

İki C Dosyasının Derleme ve Bağlama Aşamaları
Figür 2: İki C Dosyasının Derleme ve Bağlama Aşamaları[1]

Bir C kaynak kodunun başarıyla derlenmesi sonucu object code (amaç kod) olarak adlandırılan ve genellikle ".o" uzantılı dosyalarda yer alan kodlar meydana gelir. Bu kodlar işletim sistemine ve derlediğimiz mimariye özel makine kodlarını içerir. Derlediğimiz her ".c" uzantılı kaynak kod dosyası, derleme sonucunda yine aynı isimde (genellikle) ve ".o" uzantısına sahip olan amaç kod dosyalarını meydana getirir. Daha sonra ayrı ayrı oluşturulan bu dosyaların bağlanması ve tek bir çalıştırılabilir program haline getirilmesi gerekecektir. İşte bu noktadan itibaren bağlama (linking) aşamasına geçeriz.

Aşama 4: Bağlama

Bazen C programları tek bir dosyadan meydana gelmez. Bu durumda her bir dosyanın derlenmesi sonucu ortaya çıkan amaç kod dosyalarının bir araya getirilip çalıştırılabilir dosya (executable file) haline getirilmesi gerekir. Bu durumda bağlayıcı (linker) adı verilen programlar kullanılır. Bu programlar amaç kod dosyalarını bağlayarak (linking) veya tek bir amaç kod varsa onu kullanarak, o işletim sisteminin çalıştırabileceği bir dosya haline getirir. Böylelikle tıpkı Windows işletim sisteminde bulunan ".exe" uzantılı dosyalar gibi tıklayıp çalıştırabileceğiniz bir dosya oluşturulmuş olur. Bu aşamadan sonra artık C kaynak kodları doğru bir şekilde derlenmiş ve tek bir çalıştırılabilir dosya haline getirilmiş olur. Bundan sonra olacak olaylar tamamen işletim sisteminin çalışma ve bellek yönetimi yapısına göre değişmektedir.

Aşama 5: Yükleme

Derlenmiş ve çalıştırılabilir bir dosya haline getirilmiş bir C programını çalıştırdığınızda, önce bu program RAM’e yüklenir. İşte bu işleme yükleme (loading) adı verilir. Bu işlem, işletim sisteminin yükleyici program (loader) adı verilen bir programı ile yapılmaktadır. Her sistemin yükleyici programı birbirinden farklılık göstermektedir.

Aşama 6: Çalıştırma

Bir program belleğe yüklendiğinde işlemcinin bu bellekte yer alan kodları işlemesine çalıştırma (executing) adı verilir. Örneğin Windows işletim sisteminde derlenip ".exe" haline getirilmiş bir C programına çift tıklayarak açtığınızda onu belleğe yüklemiş ve çalıştırmış olacaksınız. Tüm bu aşamaları görsel olarak şu figürle özetleyebiliriz:

C Programını Derleme Evreleri
Figür 3: C Programını Derleme Evreleri[2]

Bu bölümde bir C programının oluşturulmasından çalıştırılmasına kadar olan aşamaları gösterdik. C ve onun evreleriyle ilgili giriş bilgisine sahip olduğunuza göre, artık C dili ile programlamaya başlayabilirsiniz. Buradaki bilgiler ileride kafa karışıklığını önlemek ve size yol göstermek amacıyla yazılmıştır. Hangi işletim sistemi üzerinde ve hangi IDE ile geliştirme yapacağınıza karar vermek için internette çeşitli araştırmalar yapabilirsiniz. Şu linkte çeşitli sistemlerde C dili ile programlama yapmak için kullanılan 18 editörün özellikleri güzelce sıralanmış ve editörler hakkında bilgiler verilmiştir. Bu siteden yararlanabilirsiniz:

27 Best IDEs for C/C++ Programming or Source Code Editors on Linux

Referanslar

  1. C Compilation Steps
  2. C Development Processes
5 4 votes
Article Rating
Subscribe
Bildir
guest

4 Yorum
Eskiler
En Yeniler Beğenilenler
Misafir

Gerçekten çok güzel bir yazı olmuş. C’nin çalışma mantığu bu yazıyla çok iyi anlaşılabiliyor

Yusuf

Ramden bellek tahsisini derleme aşamasından önce yapmıyor muyuz?Yani burada exe dosyasını çalıştırdığımızda bellek bize o program için alan sunuyor fakat programı yazarken kullandığımız ide aracılığıyla aslında belleği kullanmaya başlamıyor muyuz?

kokusmuc corap

emiğinize sağlık