elektrik port üyelik servisleri elektrik port üyelik servisleri

C Derleyicisi ve Çalışma Prensibi

Derleyici yani compiler olarak bilinen yapı, yazılan programın kaynak kodunu okuyarak içerisinde yazınsal hatalar ve mantık hataları olup olmadığını, eğer hatalar var ise programcıya bunu göstererek düzeltilmesini sağlayan ya da hata yoksa kaynak kodunu makine diline çeviren bir yazılımdır. Bu yazımızda derleyicilerin yaptığı işleri inceledik ve sizler için hazırladık.



A- A+
26.06.2015 tarihli yazı 3591 kez okunmuştur.

Derleyici Nedir?

Herhangi bir programlama dilinde yazılmış olan kaynak kodunu makine koduna çevirebilen yazılımdır. Bunun amacı ise çalışabilir bir yazılım elde etmektir. Bir örnekle olayı açıklayalım.

0001 01 00 00000000
 0011 01 10 00000010
 0010 01 00 00000100
 ---- -- -- ---------
  |   |  |   |_________bellek adresi
  |   |  |____________işaret  
  |   |______________sicil
  |_________________komut


Burada çevirinin amacı, programcının anladığı kaynak kodundan, işlemcinin dili olan ve anlayabildiği 0 ve 1 den oluşan makine diline çevirebilmektir. (LOAD,ADD ve STOR komutları 0001, 0011 ve 0010 olarak yorumlanır).
 

►İlginizi Çekebilir: Bilgisayarın Temelleri

 

C Derleyicisinin Yaptığı İşler

C derleyicisi birden fazla bileşene sahiptir. Derleme işlemi, bileşenlerin yaptığı işlerden biri olmasına rağmen kütüphanede tüm yapılan işlerin ismi derleme yani compile olarak adlandırılmaktadır. C derleyicisini incelediğimizde 4 tane görevi olduğunu görüyoruz:

► Ön İşlem (Preprocess)
► Derleme (Compile)
► Çevirme (Assemble)
► Bağlama (Link)

 
Derleme işlemini anlamak için aşağıdaki şekle bakarsa:



Şekil 1: Derleme İşlemi

►İlginizi Çekebilir: Hangi Programlama Dilini Seçmeliyim?

 
Hello.c adlı kaynağımızın olduğunu varsayalım. İlk olarak yazdığımız program ön işlem işini yapan preprocessor yani ön işlemciye girdirilir. Bundan sonra kodun içinde # işaretiyle başlayan ön işlemci direktifleri yorumlanır. Hemen bir örnek verelim:

#define Pİ 3

Bunun sayesinde bir Pİ sabiti tanımladık ve 3 değerini bu sabite atamış olduk. Derleyici bundan sonra programda her gördüğüsabiti yerine 3 değerini girecektir. Artık sıra compiler dediğimiz derleyicilerde. Bunun görevi ise ön işlemci tarafından işlenmiş kaynak dosyasındaki, C deyimlerini kodun çalışacağı mikro işlemcinin kavrayabileceği Assembly diline dönüştürmektir. Her işlemci farklı Assembly dilini kullanır. Intel işlemciler için derleyicinin ürettiği Assembly ile Motorola işlemcileri için üretilen aynı değildir.( Machintosh’lar Motorola işlemcilerini kullanıyordu.)
 
Derleme işleminden sonra hello.s adlı bir dosya oluşmaktadır. Assembly dosyasıda denilebilir. Burada C dilinde yazılmış Assembly diline dönüştürülmüş hali vardır. Derleme işlemi sonrasında oluşan hello.s dosyası Assembler (çevirici) adı verilen bileşene sokulur. Bu bileşen Assembly dilinde yazılmış 0 ve 1’ lerden oluşan makine diline çevirir. Bu koda nesne kodu denir ve hello.0 adı verilen dosyaya kaydedilir.
 



►İlginizi Çekebilir: Dennis Ritchie | C Dili Yaratıcısı

 
Dosya oluşturmadan önceki son aşama bağlama (link) aşamasıdır. Bu kısım bağlayıcı adı verilen bir bileşen tarafından gerçekleştirilir. Bir C programı birden fazla .c uzantılı kaynak dosyadan oluşabilir. Derleme ve çevirme işlemleri sonrası her bir kaynak için .o uzantılı kodu dosyası oluşmaktadır.  Son olarak bağlama aşaması da tamamlandığında executable (çalıştırılabilir) dosyamız oluşmaktadır. Hello.exe artık karşımızda!

1) Ön İşlem


Gcc derleyicisi dahili olarak ön işlemci barındırmaktadır. C ön işlemcisinin yaptığı 3 görev vardır.

 .c uzantılı kaynak dosyasını inlemek ayrıca bu dosyadan yorumları kaldırmak
 # ile başlayan ön işlemci komutlarını yorumlayarak kaynak dosyasına entegre yapabilmek.
 Bildiğimiz #include ile başlayan kütüphane dosyalarını entegre etmek.

Şimdi bir cevrehesapla.c programını düşünüp ön işleme kısmını ve sonrasını görelim
 


Şekil 2: Preprocess öncesi

 


Şekil 3: Preprocess Sonrası

 
Kodlarımızı incelediğimizde #define PI 3.14 olarak sabitlenmiştir. Ön işlem yapıldıktan sonra her PI görüldüğünde artık PI yerine 3.14 olarak işlem yapılmaktadır.
 

2) Derleme


Derleyicinin asıl olarak iş yaptığı kısımdır. C programlama dilini kullanarak yazdığımız kodları, ilk önce derleme yapılan bilgisayarın mikroişlemcisinin Assembly diline çevirmektir. Çeviri olduktan sonra Assembler yardımıyla uygulamalar rahatlıkla 0 ve 1’lerden oluşan makine diline çevirilir. Derleme sonrasında Assembly kodu işlemciye göre farklılık gösterir. Bunun nedeni ise her işlemcinin kendine özgü Assembly dili vardır.

 

3) Çevirme

 
Bu kısımda ise derlemeden sonra .s uzantılı dosyayı Assembler adı verilen bileşene sokulur. Assembly dilindeki kodu 0 ve 1’lerden oluşan makine koduna çevirir ve bu koda nesne kodu adı verilir.

 

4) Bağlama


Son aşamamız olan bağlama dosya oluşmadan önceki son aşamadır. Bir C programı, birden fazla .c uzantılı kaynak dosyadan oluşabilmektedir. Derleme ve çevirme adımlarından sonra her bir kaynak dosya için .o uzantılı nesne kodu dosyası oluşur. Bağlayıcı bileşenin yaptığı iş .o uzantılı nesne kodlarını ve programda kullanılan kütüphane dosyalarındaki kodlarla sentezleyerek tek bir çalışabilir dosya oluşturmaktır. Printf fonksiyonunu düşünürsek kütüphane fonksiyonu olduğunu bilmekle beraber bu fonksiyonu kullanılan programlar derleme işleminden sonra, printf fonksiyonunun bulunduğu kütüphane dosyası olan stdio.h (standart input output) kütüphanesiyle birleştirilmelidir. Bağlayıcı sonrası çalıştırılabilir dosyalar Windows işletim sistemi için .exe olarak Linux için ise .out uzantılı olurlar.



Kaynak: 
►CompileOnline

►Wikipedia
►Codelab
Safa BİLGİNER Safa BİLGİNER Yazar Hakkında Tüm yazıları Mesaj gönder Yazdır



Aktif etkinlik bulunmamaktadır.
ANKET
Endüstri 4.0 için En Hazır Sektör Hangisidir

Sonuçlar