Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

objasnjenje predprocesorske direktive,plese help

[es] :: C/C++ programiranje :: C/C++ za početnike :: objasnjenje predprocesorske direktive,plese help

[ Pregleda: 2814 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dario_daxy
Dario Petrovic
student
Teslic

Član broj: 230799
Poruke: 12
213.196.98.*



+3 Profil

icon objasnjenje predprocesorske direktive,plese help09.07.2010. u 11:42 - pre 167 meseci
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....

 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: objasnjenje predprocesorske direktive,plese help09.07.2010. u 12:07 - pre 167 meseci
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.
 
Odgovor na temu

dario_daxy
Dario Petrovic
student
Teslic

Član broj: 230799
Poruke: 12
213.196.98.*



+3 Profil

icon Re: objasnjenje predprocesorske direktive,plese help09.07.2010. u 12:21 - pre 167 meseci
#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?
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: objasnjenje predprocesorske direktive,plese help09.07.2010. u 12:45 - pre 167 meseci
U ovom slučaju zagrade nisu bitne ali da imaš neku operaciju u parametru makroa onda bi bile bitne.

d1(1+2) = 1+2*1+2 = 5
d2(1+2) = (1+2)*(1+2) = 9
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.dynamic.sbb.rs.



+1 Profil

icon Re: objasnjenje predprocesorske direktive,plese help10.07.2010. u 09:57 - pre 167 meseci
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.
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."
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: objasnjenje predprocesorske direktive,plese help

[ Pregleda: 2814 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.