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