Programiranje u C-u

  
 

 NAREDBE  PREPROCESORU

Izraz  define se koristi za lakše čitanje programa. Pogledajmo slijedeće primjere,
        #define TRUE    1    /* Nemojte koristiti točka-zarez , # mora biti prvi znak u liniji */
        #define FALSE   0
        #define NULL    0
        #define AND     &
        #define OR      |
        #define EQUALS  ==

        game_over = TRUE;
        while( list_pointer != NULL )
                ................
Zapamtite da naredbe  preprocesoru započinju sa simbolom # , i da NISU završene točka-zarezom. Uobičajeno je naredbe preprocesoru navoditi na početku koda.

Preprocesorske naredbe izvršava prevodioc (ili preprocesor) prije no što je program stvarno preveden. Svi # izrazi se izvrše tako da se simboli (poput TRUE) koji se pojavljuju u C programu zamjenjuju njihovim vrijednostima (poput 1). Kad preprocesor izvrši ovu zamjenu,  program se prevodi.

Opaćnito se preprocesorske konstante pišu VELIKIM SLOVIMA.

Kliknite ovdje za daljnje informacije o preprocesorskim direktivama, uključujuči macro.


VJEŽBA C4
Koristite preprocesorske naredbe za zamjenu slijedećih konstanti

        0.312
        W
        37
Kliknite ovdje za rješenja


 

ZAMJENA SIMBOLIČKIH KONSTANTI KORIŠTENJEM  #define
Pogledajmo sada nekoliko primjera korištenja simbolićkih konstanti u našim programima. Slijedeći  program definira konstantu imena POREZNA_STOPA.

        #include <stdio.h>

        #define POREZNA_STOPA  0.10

        main()
        {
                float glavnica;
                float porez;

                glavnica = 72.10;
                porez = glavnica * POREZNA_STOPA;
                printf("Porez na %.2f iznosi %.2f\n", glavnica, porez );
        }
Preprocesor prvo zamjenjuje sve simbolieke konstante prije no što je program preveden, tako nakon preprocesora (i prije prevođenja), program izgleda ovako,
        #include <stdio.h>

        #define POREZNA_STOPA  0.10

        main()
        {
                float glavnica;
                float porez;

                glavnica = 72.10;
                porez = glavnica * 0.10;
                printf("Porez na %.2f iznosi %.2f\n", glavnica, porez );
        }

NE MOŽETE PRIDJELJIVATI VRIJEDNOSTI  SIMBOLIČKIM KONSTANTAMA
Uzimajući gornji program kao primjer, pogledajte promjene koje smo sada napravili. Dodali smo izraz koji nastoji promijeniti  POREZNU_STOPU na novu vrijednost.

        #include <stdio.h>

        #define POREZNA_STOPA  0.10

        main()
        {
                float glavnica;
                float porez ;

                glavnica = 72.10;
                POREZNA_STOPA = 0.15;
                porez = glavnica * POREZNA_STOPA;
                printf("Porez na %.2f iznosi %.2f\n", glavnica, porez  );
        }
Ovo je nedozvoljeno. Simboličkoj konstanti se ne može pridružiti nova vrijednost.

ZAMJENA SE VRŠI PISANJEM, PA PAZITE NA GREŠKE
Kao što je pokazano, preprocesor izvodi pisanu zamjenu simboličkih konstanti. Izmijenimo malo naš program i unesimo grešku da pojasnimo problem.

        #include <stdio.h>

        #define POREZNA_STOPA  0.10

        main()
        {
                float glavnica;
                float porez;

                glavnica = 72.10;
                porez = (glavnica * POREZNA_STOPA)+ 10.02;
                printf("Porez na %.2f iznosi %.2f\n", glavnica, porez );
        }
U ovom slučaju, greška je u tomu što smo #define završili točka-zarezom. Preprocesor izvodi supstituciju i pogreška se javlja u liniji (označava je prevodioc)
                porez = (glavnica * 0.10; )+ 10.02;
Međutim, vi ne vidite izlaz preprocesora. Ako koristite TURBO C, samo vidite
                porez = (glavnica * POREZNA_STOPA)+ 10.02;
označeno kao grešku, a vama to izgleda u redu (ali nije! nakon zamjene).


 

LAKO MIJENJANJE PROGRAMA KORIŠTENJEM  #define
Cijela svrha korištenja #define u vašim programima je da ih učinite lakšima za čitanje i mijenjanje. Koristeći gornje programe kao primjere, koje promjene bi trebalo napraviti ako se POREZNA_STOPA promijenila na  20%?

Očito, odgovor je da treba promijeniti #define naredbu koja deklarira simbolieku konstantu. Pisali bismo

        #define POREZNA_STOPA = 0.20
Bez korištenja simboličkih konstanti, morali bismo unijeti vrijednost 0.20 u program, a ona se može pojavljivati nekoliko puta (ili nekoliko desetaka puta).

To bi mijenjanje programa učinilo teškim, zato što bi morali tražiti i zamijeniti svaku pojavu te varijable u programu. Međutim, kako programi postaju veći, što bi se dogodilo ako bi koristili vrijednost  0.20 u računu koji nema ništa s  POREZNOM_STOPOM!


ZAKLJUČAK O #define