12.07.2015 Views

Programski jezik C - Pmf

Programski jezik C - Pmf

Programski jezik C - Pmf

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

8.3. PARAMETRIZIRANA #DEFINE NAREDBA 137max(i++,j++);varijable i, j ne bi bile inkrementirane samo jednom (kao pri funkcijskompozivu) već bi veća varijabla bila inkrementirana dva puta.Argumente makroa treba stavljati u zagrade kako bi se izbjegla situacijailustrirana u sljedećem primjeru: ako definiramo#define kvadrat(x) x * xonda bi kvadrat(x+1) dao x+1 * x+1, što očito nije ono što smo htjeli.Zadatak. Pretpostavimo da smo definirali#definemax(A,B) (A)>(B) ? (A) : (B)Što bi bio rezultat poziva#definex=y+max(0.1,0.2);ovisno o y?Unutar dvostrukih navodnika parametar makroa neće biti zamijenjenstvarnim argumentom. Na primjer, ako imamo definiciju#define PSQR(X) printf("Kvadrat od X je %d.\n",((X)*(X)));onda bi pozivPSQR(5);ispisaoKvadrat od X je 25.To očito nije ono što smo htjeli, jer je X u znakovnom nizu tretiran kao običanznak, a ne kao parametar makroa. To se može ispraviti pomoću operatora #.To je operator koji makro parametar pretvara u string. Korektana definicijabi bila:#include #define PSQR(X) printf("Kvadrat od " #X " je %d.\n",((X)*(X)));int main(void){int y=5;}PSQR(y);PSQR(2+4);return 0;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!