logo

C'de derleme işlemi

Derleme nedir?

Derleme, kaynak kodunu nesne koduna dönüştürme işlemidir. Derleyici yardımıyla yapılır. Derleyici kaynak kodun sözdizimsel veya yapısal hatalarını kontrol eder ve kaynak kodunda hata yoksa nesne kodunu üretir.

C'de derleme işlemi

C derleme işlemi girdi olarak alınan kaynak kodunu nesne koduna veya makine koduna dönüştürür. Derleme süreci dört adıma ayrılabilir; yani Ön İşleme, Derleme, Birleştirme ve Bağlama.

Önişlemci kaynak kodunu girdi olarak alır ve kaynak koddaki tüm yorumları kaldırır. Önişlemci, önişlemci direktifini alır ve yorumlar. Örneğin, eğer , Direktif programda mevcutsa, ön işlemci direktifi yorumlar ve bu direktifi programın içeriğiyle değiştirir. 'stdio.h' dosya.

dizeleri bölme c++

Programımızın çalıştırılabilir forma dönüştürülmeden önce geçtiği aşamalar şunlardır:

    Önişlemci Derleyici Montajcı Bağlayıcı
C'de derleme işlemi

Önişlemci

Kaynak kodu, bir metin düzenleyicide yazılan koddur ve kaynak kod dosyasına '.c' uzantısı verilir. Bu kaynak kodu önce ön işlemciye iletilir ve daha sonra ön işlemci bu kodu genişletir. Kodu genişlettikten sonra genişletilen kod derleyiciye iletilir.

Derleyici

Önişlemci tarafından genişletilen kod derleyiciye iletilir. Derleyici bu kodu derleme koduna dönüştürür. Veya C derleyicisinin önceden işlenmiş kodu montaj koduna dönüştürdüğünü söyleyebiliriz.

Montajcı

Montaj kodu, bir montajcı kullanılarak nesne koduna dönüştürülür. Derleyici tarafından oluşturulan nesne dosyasının adı kaynak dosyayla aynıdır. Nesne dosyasının DOS'taki uzantısı '.obj', UNIX'te ise uzantısı 'o'dur. Kaynak dosyanın adı ise 'Merhaba C', o zaman nesne dosyasının adı 'hello.obj' olacaktır.

Bağlayıcı

Temel olarak C ile yazılan tüm programlar kütüphane fonksiyonlarını kullanır. Bu kütüphane fonksiyonları önceden derlenmiştir ve bu kütüphane dosyalarının nesne kodu '.lib' (veya '.a') uzantısıyla saklanır. Bağlayıcının ana çalışması, kütüphane dosyalarının nesne kodunu programımızın nesne koduyla birleştirmektir. Bazen programımız diğer dosyalarda tanımlanan işlevlere atıfta bulunduğunda durum ortaya çıkar; o zaman bağlayıcı bunda çok önemli bir rol oynar. Bu dosyaların nesne kodunu programımıza bağlar. Bu nedenle, bağlayıcının görevinin programımızın nesne kodunu kütüphane dosyalarının ve diğer dosyaların nesne koduna bağlamak olduğu sonucuna vardık. Bağlayıcının çıktısı yürütülebilir dosyadır. Yürütülebilir dosyanın adı kaynak dosyayla aynıdır ancak yalnızca uzantıları farklıdır. DOS'ta yürütülebilir dosyanın uzantısı '.exe'dir ve UNIX'te yürütülebilir dosyanın adı 'a.out' olabilir. Örneğin, bir programda printf() işlevini kullanıyorsak, bağlayıcı ilgili kodunu bir çıktı dosyasına ekler.

Bir örnek üzerinden anlayalım.

Merhaba C

 #include int main() { printf('Hello javaTpoint'); return 0; } 

Şimdi yukarıdaki programın akış şemasını oluşturacağız:

C'de derleme işlemi

Yukarıdaki akış şemasında bir programı yürütmek için aşağıdaki adımlar gerçekleştirilir:

  • İlk olarak, giriş dosyası, yani, Merhaba C, ön işlemciye iletilir ve ön işlemci kaynak kodunu genişletilmiş kaynak koduna dönüştürür. Genişletilmiş kaynak kodunun uzantısı şu şekilde olacaktır: Merhaba ben.
  • Genişletilmiş kaynak kodu derleyiciye iletilir ve derleyici bu genişletilmiş kaynak kodunu montaj koduna dönüştürür. Montaj kodunun uzantısı şu şekilde olacaktır: merhaba.
  • Bu montaj kodu daha sonra montaj kodunu nesne koduna dönüştüren montajcıya gönderilir.
  • Bir nesne kodunun oluşturulmasından sonra bağlayıcı yürütülebilir dosyayı oluşturur. Yükleyici daha sonra yürütme için yürütülebilir dosyayı yükleyecektir.