Kada napišemo program u C++ jeziku, računar taj kod još uvek ne može direktno da razume.

Računar ne razume:

  • cout,
  • if,
  • for,
  • niti bilo koju drugu C++ instrukciju.

On razume samo:

  • mašinski jezik,
  • odnosno binarne instrukcije sastavljene od nula i jedinica.

Zbog toga postoji poseban program koji prevodi C++ kod u jezik koji računar može da izvršava.

Taj program naziva se:

kompajler

U ovom tekstu naučićemo:

  • šta je kompajler,
  • kako funkcioniše proces kompajliranja,
  • kako nastaje izvršni program,
  • šta su greške pri kompajliranju,
  • i kako računar pokreće program.

Šta je kompajler?

Kompajler je program koji prevodi izvorni kod napisan u programskom jeziku u mašinski jezik.

Drugim rečima:

  • programer piše kod,
  • kompajler prevodi kod,
  • računar izvršava prevedene instrukcije.

Bez kompajlera računar ne bi mogao da pokrene C++ program.

Najpoznatiji C++ kompajleri su:

  • GCC,
  • g++,
  • Clang,
  • MSVC.

Kada kliknemo:

Build

ili:

Run

u Code::Blocks-u ili Visual Studio-u, zapravo pokrećemo kompajler.

Šta je izvorni kod?

Kod koji programer piše naziva se:

izvorni kod

To je tekstualni fajl koji najčešće ima ekstenziju:

.cpp

Primer jednostavnog izvornog koda:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello World";
    return 0;
}

Ovaj kod je razumljiv ljudima, ali računar još uvek ne može direktno da ga izvršava.

Zbog toga mora da prođe kroz proces kompajliranja.

Šta je proces kompajliranja?

Proces kompajliranja predstavlja pretvaranje izvornog koda u izvršni program.

Taj proces prolazi kroz više koraka.

1. Analiza koda

Kompajler prvo proverava:

  • sintaksu,
  • strukturu programa,
  • greške,
  • deklaracije promenljivih,
  • i pravila jezika.

Ako postoji greška:

cout << "Hello"

kompajler će prijaviti problem jer nedostaje:

;

Program tada neće moći da se pokrene.

2. Prevođenje u mašinski jezik

Ako nema grešaka, kompajler prevodi instrukcije u mašinski kod.

Na primer:

a = b + c;

postaje veliki broj binarnih instrukcija koje procesor može da izvršava.

3. Kreiranje izvršnog programa

Na kraju procesa nastaje:

  • .exe fajl na Windows sistemima,
  • ili izvršni fajl na Linux sistemima.

Taj fajl sada može direktno da se pokrene.

Šta je mašinski jezik?

Mašinski jezik predstavlja jedini jezik koji procesor direktno razume.

Sastoji se od:

  • nula,
  • jedinica,
  • i instrukcija procesora.

Na primer:

1011010100101010

Pisanje programa direktno u mašinskom jeziku bilo bi veoma teško i komplikovano.

Zbog toga koristimo programske jezike poput C++ koji omogućavaju ljudima da pišu razumljiv kod.

Kompajler zatim obavlja sav posao prevođenja.

Šta su greške pri kompajliranju?

Jedan od najvažnijih zadataka kompajlera jeste pronalaženje grešaka.

Najčešće greške su:

  • nedostaje tačka-zarez,
  • pogrešno napisano ime promenljive,
  • nedostaje zagrada,
  • pogrešna sintaksa.

Na primer:

int broj
cout << broj;

Kompajler će prijaviti grešku jer nedostaje:

;

Greške koje kompajler pronalazi nazivaju se:

sintaksne greške

One sprečavaju pokretanje programa.

Šta se dešava kada pokrenemo program?

Kada pokrenemo izvršni fajl:

  1. operativni sistem učitava program u memoriju,
  2. procesor počinje izvršavanje instrukcija,
  3. instrukcije se izvršavaju redom,
  4. program prikazuje rezultat.

Procesor izvršava instrukcije neverovatnom brzinom — milijardama puta u sekundi.

Razlika između kompajlera i interpretera

Neki jezici koriste:

kompajler

a neki:

interpreter

Kompajler:

  • prevodi ceo program odjednom,
  • kreira izvršni fajl,
  • program radi veoma brzo.

Interpreter:

  • izvršava kod liniju po liniju,
  • ne kreira poseban izvršni fajl,
  • sporiji je.

C++ koristi:

kompajler

dok na primer Python koristi:

interpreter

Zašto je kompajliranje važno?

Razumevanje procesa kompajliranja veoma je važno za svakog programera.

Kada razumete:

  • kako nastaje izvršni program,
  • kako kompajler proverava kod,
  • i kako računar izvršava instrukcije,

mnogo lakše:

  • pronalazite greške,
  • optimizujete programe,
  • i razumete način rada računara.

To predstavlja osnovu ozbiljnog programiranja.

Rezime

Kompajler predstavlja ključni deo razvoja C++ programa.

Njegov zadatak je da:

  • proveri kod,
  • pronađe greške,
  • prevede instrukcije,
  • i kreira izvršni program koji računar može da pokrene.

Bez kompajlera računar ne bi mogao da razume C++ kod.

Razumevanje procesa kompajliranja predstavlja jedan od najvažnijih koraka u učenju programiranja i rada računara.

Mini test

  1. Šta je kompajler?
    a) Operativni sistem
    b) Program za prevođenje koda
    c) Internet browser
  2. Šta predstavlja izvorni kod?
    a) Mašinski jezik
    b) Kod koji programer piše
    c) Grafički prikaz programa
  3. Koju ekstenziju najčešće imaju C++ fajlovi?
    a) .mp3
    b) .cpp
    c) .jpg
  4. Šta radi kompajler kada pronađe grešku?
    a) Ignoriše grešku
    b) Briše program
    c) Prijavljuje grešku i zaustavlja kompajliranje
  5. Šta nastaje nakon uspešnog kompajliranja?
    a) Izvršni program
    b) Internet stranica
    c) Slika

Zadaci za vežbu

  1. Objasni svojim rečima šta radi kompajler.
  2. Napiši primer jednostavnog C++ programa.
  3. Namerno ukloni jednu tačku-zarez iz programa i pogledaj kakvu grešku prijavljuje kompajler.
  4. Istraži:
    Koji kompajler koristi Visual Studio?
  5. Objasni razliku između kompajlera i interpretera.

Domaći zadatak

Nacrtaj kompletan dijagram procesa kompajliranja:

Programer → Izvorni kod → Kompajler → Mašinski kod → Izvršni program → Procesor

Za svaki korak napiši kratko objašnjenje šta se dešava.

Pristupačnost