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

Kod koji programer piše predstavlja samo tekstualni zapis instrukcija koje čovek može da pročita i razume.

Da bi računar mogao da izvrši program, taj kod mora da prođe kroz proces kompajliranja i pretvaranja u izvršni program.

U ovom tekstu naučićemo:

  • šta je izvorni kod,
  • šta je izvršni program,
  • kako nastaje izvršni fajl,
  • koje su razlike između njih,
  • i zašto su oba važna u procesu razvoja softvera.

Šta je izvorni kod?

Izvorni kod predstavlja tekst koji programer piše koristeći programski jezik.

To je kod koji:

  • čovek može da pročita,
  • menja,
  • uređuje,
  • i razvija.

Najčešće se čuva u fajlovima sa ekstenzijom:

.cpp

Primer jednostavnog izvornog koda:

#include <iostream>
using namespace std;

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

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

Izvorni kod predstavlja „uputstvo“ koje tek treba prevesti u mašinski jezik.

Karakteristike izvornog koda

Izvorni kod:

  • piše programer,
  • čitljiv je ljudima,
  • može se menjati,
  • sadrži instrukcije programskog jezika,
  • i mora proći kroz kompajler.

Najvažnije osobine izvornog koda su:

  • preglednost,
  • organizacija,
  • i mogućnost izmene.

Programeri često provode mnogo vremena uređujući i optimizujući upravo izvorni kod.

Šta je izvršni program?

Izvršni program nastaje nakon što kompajler prevede izvorni kod u mašinski jezik.

To je fajl koji računar može direktno da pokrene.

Na Windows sistemima izvršni program najčešće ima ekstenziju:

.exe

Za razliku od izvornog koda, izvršni program:

  • nije namenjen ljudima,
  • već procesoru i operativnom sistemu.

Unutar izvršnog programa nalaze se:

  • mašinske instrukcije,
  • memorijske adrese,
  • i podaci koje procesor izvršava.

Primer izvršnog programa nije lako čitljiv ljudima jer sadrži binarne instrukcije i mašinski kod.

Kako nastaje izvršni program?

Proces nastanka izvršnog programa prolazi kroz nekoliko koraka.

1. Pisanje izvornog koda

Programer piše program:

int a = 10;
int b = 20;
cout << a + b;

2. Kompajliranje

Kompajler:

  • proverava greške,
  • prevodi kod,
  • i kreira mašinske instrukcije.

3. Linkovanje

Kod većih programa povezuju se biblioteke i dodatni delovi programa.

4. Kreiranje izvršnog fajla

Na kraju nastaje:

  • .exe
  • ili izvršni program za operativni sistem.

Taj program sada može direktno da se pokrene.

Glavne razlike između izvornog koda i izvršnog programa

Postoji velika razlika između ova dva tipa fajlova.

Izvorni kod:

  • piše čovek,
  • razumljiv je programerima,
  • može se uređivati,
  • koristi C++ sintaksu,
  • zahteva kompajler.

Izvršni program:

  • nastaje kompajliranjem,
  • izvršava ga računar,
  • nije lako čitljiv ljudima,
  • sadrži mašinski kod,
  • može direktno da se pokrene.

Primer iz prakse

Kada programer razvija aplikaciju:

  1. piše .cpp fajlove,
  2. pokreće kompajler,
  3. nastaje .exe fajl,
  4. korisnik pokreće izvršni program.

Korisnik obično nikada ne vidi izvorni kod.

On koristi samo izvršni program.

Na primer:

  • Google Chrome,
  • Photoshop,
  • video igre,
  • i operativni sistemi

interno su napisani u izvornom kodu, ali korisnici koriste samo izvršne programe.

Zašto računar ne može direktno da izvrši izvorni kod?

Računar ne razume:

  • cout,
  • if,
  • for,
  • niti druge C++ instrukcije.

Procesor razume samo:

  • binarne instrukcije,
  • odnosno mašinski jezik.

Zbog toga kompajler mora da prevede:

cout << "Hello";

u veliki broj mašinskih instrukcija koje procesor može da izvršava.

Da li možemo otvoriti izvršni program?

Izvorni kod možemo otvoriti:

  • u editoru,
  • Notepad-u,
  • Visual Studio-u,
  • ili Code::Blocks-u.

Izvršni program ne možemo čitati kao običan tekst jer sadrži mašinski kod.

Ako pokušamo da otvorimo .exe fajl u Notepad-u videćemo:

  • čudne simbole,
  • nerazumljive karaktere,
  • i binarne podatke.

To pokazuje da izvršni program nije namenjen ljudima već računaru.

Zašto je važno razumeti razliku?

Razumevanje razlike između izvornog koda i izvršnog programa predstavlja osnovu programiranja.

Kada razumete:

  • šta piše programer,
  • šta prevodi kompajler,
  • i šta izvršava procesor,

mnogo lakše razumete:

  • rad računara,
  • kompajliranje,
  • greške u programu,
  • i razvoj softvera.

To znanje predstavlja osnovu za ozbiljno programiranje i razvoj aplikacija.

Rezime

Izvorni kod predstavlja program koji programer piše koristeći programski jezik poput C++.

Izvršni program nastaje nakon procesa kompajliranja i predstavlja fajl koji računar može direktno da pokrene.

Glavna razlika je u tome što:

  • izvorni kod razume čovek,
  • dok izvršni program razume računar.

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

Mini test

  1. Šta predstavlja izvorni kod?
    a) Mašinski jezik
    b) Kod koji programer piše
    c) Operativni sistem
  2. Koja je najčešća ekstenzija C++ izvornog fajla?
    a) .cpp
    b) .mp3
    c) .jpg
  3. Šta predstavlja izvršni program?
    a) Tekstualni dokument
    b) Program koji računar može direktno da pokrene
    c) Internet stranica
  4. Šta prevodi izvorni kod u izvršni program?
    a) Browser
    b) Kompajler
    c) Monitor
  5. Zašto izvršni program nije lako čitljiv ljudima?
    a) Zato što sadrži mašinski kod
    b) Zato što je zaključan
    c) Zato što nema ekstenziju

Zadaci za vežbu

  1. Napiši jednostavan C++ program i sačuvaj ga kao .cpp fajl.
  2. Kompajliraj program i pronađi .exe fajl.
  3. Uporedi veličinu .cpp i .exe fajla.
  4. Pokušaj da otvoriš .exe fajl u tekst editoru. Šta primećuješ?
  5. Objasni svojim rečima razliku između izvornog koda i izvršnog programa.

Domaći zadatak

Napravi tabelu u kojoj ćeš uporediti:

  • izvorni kod,
  • i izvršni program.

Tabela treba da sadrži:

  • ko ih koristi,
  • ko ih razume,
  • da li se mogu uređivati,
  • da li se mogu direktno pokrenuti,
  • i koje ekstenzije koriste.

Na kraju napiši svoj zaključak:
Zašto su oba važna u razvoju softvera?

Pristupačnost