Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Direktiva #define

[es] :: C/C++ programiranje :: C/C++ za početnike :: Direktiva #define

[ Pregleda: 1331 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pitomir
Beograd

Član broj: 268651
Poruke: 104
*.dynamic.isp.telekom.rs.



+3 Profil

icon Direktiva #define11.01.2012. u 22:44 - pre 149 meseci
Moze li neko da mi objasni sta je rezultat pretprocesiranja narednog koda, a sta se ispisuje nakon prevodjenja i izvrsavanja:

#define IZR(a,b) (b-a)*(a+b)
printf("%d", IZR(3+4, 4-3));

Hvala!
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Direktiva #define11.01.2012. u 22:54 - pre 149 meseci
Zato što je #define makronaredba koja stavlja literale na mesta promenljivih
Code:

#define IZR(a,b) (b-a)*(a+b)
printf("%d", IZR(3+4, 4-3));

posle obrade pretprocesora postaje:
Code:

printf("%d",(4-3-3+4)*(3+4+4-3));

što je ekvivalentno sa
Code:

printf("%d",2*8);


Dakle, a je "3+4", a b je "4-3" pa je (b-a)*(a+b), u stvari ("4-3"-"3+4")*("3+4"+"4-3")
Znake navoda sam stavio da bih istakao da se na mestu "a" u define izrazu kopira "3+4"

Da bi dobio rezultat 48, morao bi da napišeš define kao
Code:

#define IZR(a,b) (b-(a))*(a+b)


EDIT: izmenio si svoje pitanje dok sam ja kucao odgovor. Originalno pitanje na koje sam ja odgovorio je bilo zašto je rezultat 16, a ne 48
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Direktiva #define

[ Pregleda: 1331 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.