Compiler qanday ishlaydi? C kompilyatsiya bosqichlari

Assalomu Alaykum , dasturlashni endi boshlaganlarda ko'p uchraydigan holat bu biz yozgan dastur kodini kompyuter qanday tushunadi deb o'ylash . Bunga oddiy javob compiler ularni mashina kodiga o'giradi (Bu bir nechta jarayondan iborat) . Bugun biz shu jarayon haqiqatda qanaqa qismlardan iboratligini ko`rib chiqamiz (C compiler misoli sifatida).

Compile bosqichlari

Compile 4 bosqichdan iborat bo'lib ular ketma-ket sodir bo'ladi .

  1. Preprocessing (oldindan ishlov berish).

  2. Compilation (Kompilyatsiya).

  3. Assembly (assemblerga o'girish).

  4. Linking (bog'lash).

hamma qismlar
hamma qismlar

Preprocessing (oldindan ishlov berish).

Bu jarayonda biz header fayldan foydalangan holda header ma'lumotlarini ya'ni shu kutubxonada ishlatilgan funksiyalar va turlar , konstantalarni olib kelib #include kalit so'zini o'ringa qo'yadi - ya'ni funksiyaning nomi va uni qanday chaqirishni, lekin uning haqiqiy kodini emas.

#include <stdio.h>
#include <math.h>

int main() {
   int a = 1234, b = -344;
   printf("The absolute value of %d is %lf\n", a, fabs(a));
   printf("The absolute value of %d is %lf\n", b, fabs(b));
   return 0;
}

tepadagi holatda biz stdio.h kutubxonasining header faylidan printf va math kutubxonasi header faylidan esa fabs funksiyalari prototipini olib keladi . Buning uchun #include sintaksisi orqali berilgan header fayllardan foydalanadi. Bu compiler ularni qanday chaqirishni bilish uchun kerak

stdio.h va math.h — bu header fayllar, kutubxonaning o'zi emas. printf va fabs ning haqiqiy kodi libc va libm kutubxonalarida turadi va u faqat Linking bosqichida ulanadi.

Preprocessing
Preprocessing

Compilation (Kompilyatsiya).

Bu bosqich haqiqatdan ham compiling jarayoni bo'lib sizning dasturlash tilidagi kodingizni Assembly tiliga o'giradi. Assembly nima — u low-level dasturlash tili bo'lib malum bir buyruqlar to'plamiga ega .

Sizning kodingiz taxminan shunaqa ko'rinishda bo'ladi :

Assemble code
Assemble code

Bu yerdagi sariq rangdagi so'zlar Assembly dastularidagi buyruqlar (qo'shish, ko'paytirish, xotira bilan ishlash va boshqalar) .

Assembly (assemblerga o'girish).

Bu bosqichda rostdan ham assembly kodi machine kodga (yani 0 va 1larga) almashtiriladi. Ko'rinishi quyidagicha bo'ladi :

Mashuna kodi
Mashuna kodi

Bu qismda hamma siz yozgan kodlar 0 va 1 ga o'giriladi ammo kutubxona kodlari boshqa fayllarda va ularni bir jamlash kerak.

Linking (bog'lash).

Bu bosqichda eng asosiysi bo'lib boshqalarning kodidan foydalanishga yordam beradi. Masalan bizning tepadagi misoldagidek biz foydalangan math va stdio kutubxonalarining machine codelarini olib ularni bir biriga

bog'laydi va hammasi yig'ilib bitta biz nom bergan faylga aylantiradi.

Tugallangan fayl ko'rinishi
Tugallangan fayl ko'rinishi

Xulosa

Bundan ko'inadiki dasturimizning ishlashi qanaqadur sehrli jarayon emas .Shunchaki bu qiyin jarayonni qismlarga bo'lib olib amalga oshirganda ancha osonlashadi (Divide and Conquer).

E'tiboringiz uchun rahmat, Xatoliklar uchun uzr so'raymiz.