#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 37Kliknite 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.20Bez 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