[ 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! |
[ pitomir @ 11.01.2012. 22:44 ] @
[ 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 Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|