[ pitomir @ 11.01.2012. 22:44 ] @
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!
[ djoka_l @ 11.01.2012. 22:54 ] @
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