Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.452 pregleda

Najnovija ↓

objasnjenje predprocesorske direktive,plese help 09.07.2010. u 12:42 · pre 198 meseci #1
imao sam na ispitu zadatak koja je razlika , i da objasnim ...

#define d1(a) a*a
#define d2(a) (a)*(a)


program:

#include <stdio.h>
#include <stdlib.h>
#define d1(a) a*a
#define d2(a) (a)*(a)

main()
{
int d1,d2;
printf("%d\n",d1);
printf("%d\n",d2);
system("PAUSE");
return 0;
}



izbacuje rezultat 2 i 51 :s


MOZE LI MI NEKO OBJASNITI RAZLIKU I STA TACNO STA RADI....

Re: objasnjenje predprocesorske direktive,plese help 09.07.2010. u 13:07 · pre 198 meseci #2
Ovo ne bi trebalo da može da se kopajlira. Imaš makro d1(), i promenljivu d1. Umesto promenljive se ekspanduje makro, ali nema zagrada, tako da je to greška u ekspandovanju. Probao sam u VS2003, i začudo kompajliranje je prošlo, a rezultat rada programa kod mene je
-858993460
-858993460
Press any key to continue . . .


Nije došlo do ekspandovanja makroa, i program je prosto ispisao sadržaj neinicijalizovanih promenljivih d1 i d2.
Re: objasnjenje predprocesorske direktive,plese help 09.07.2010. u 13:21 · pre 198 meseci #3
#include <stdio.h>
#include <stdlib.h>
#define d1(a) a*a
#define d2(a) (a)*(a)

main()
{ int a,b;

printf("%d\n",a=d1(3));
printf("%d\n",b=d2(a));
system("PAUSE");
return 0;
}

mislim da sam skontao,znaci u a prosledjujem broj neki(nebitno koji) u ovom slucaju 3 i ispisuje mi 3*3 to je 9 za d1 , a za d2 posto je sad a=9 bit ce (9)*(9) i rezultat je 81 :)



a kako se meni cini ove zagrade (a)*(a) nista ne znace ,tako da nema razlike izmedju njih ????da li sam u pravu?
Re: objasnjenje predprocesorske direktive,plese help 10.07.2010. u 10:57 · pre 198 meseci #5
Na preprocesorske direktive gledaj kao na bukvalnu zamenu teksta u definiciji makroa onim sto je dato kao argument makroa. Dakle, makro ce ono sto mu dajes kao a prosto da iskopira svuda u svojoj definiciji bez ikakve provere tipova ili vrednosti. To znaci da ako mu zadas samo broj 1, onda izmedju d1 i d2 nece biti razlike, ali cim mu das neki izraz, zagrade koje se pojavljuju u d2 uticu na racunanje tog izraza.
Potpis
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme