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

cudano ponasanje koda

[es] :: C/C++ programiranje :: cudano ponasanje koda

[ Pregleda: 4643 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mosho

Član broj: 121929
Poruke: 4
*.etfbl.net.



Profil

icon cudano ponasanje koda20.11.2006. u 15:10 - pre 211 meseci
Dev c++
kod:
#include <stdio.h>
main()
{
int i = 5;
printf("%d %d", i, i++);
}

ispis: 6 5

Molim komentar
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
89.216.236.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: cudano ponasanje koda20.11.2006. u 15:28 - pre 211 meseci
Code:

printf("%d %d", i, i++);

Dakle, obrada ide s desna da levo, pa:

Code:

i++

Ostaje 5 za zamenu sa pripadajućim %d (jer je "++" iza "i"), a uvećava se za jedan za sledeću upotrebu, tj.za:
Code:

i


Probaj:
Code:

printf("%d %d", i, ++i);

ili
Code:

printf("%d %d", i, i+=1);

... mislim da bi trebalo da bude: 6 6

 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: cudano ponasanje koda20.11.2006. u 16:55 - pre 211 meseci
NjET!!!
DevC++ nisam koristio ali rezultat koji treba da se ispise je "5 5". Koristio si postfiksnu notaciju u gornjem primeru sto znaci da se vrednost promenljive uvecava tek po zavrsetku tekuce naredbe, tako da nema veze kojim ga redosledom pisali. Stavi:

printf("%d %d", i++, i);

rezultat MORA i dalje da bude "5 5". Ako nije onda nesto nije OK sa kompajlerom...
 
Odgovor na temu

icobh
Igor Pejašinović
Network Admin
Navigo SC d.o.o.
Banja Luka

Član broj: 18738
Poruke: 1319
*.inecco.net.

Sajt: www.nsc.ba


+4 Profil

icon Re: Čudno ponašanje koda20.11.2006. u 18:15 - pre 211 meseci
GCC pravi takve probleme, jer kako sam skontao, a dosta toga sam iskompajlirao sa njim, ima problema sa memory managment-om. Uglavnom se problem rješava resetovanjem kompa...

P.S. Trenutno koristim 3.4.5 verziju i nije mi se ovo događalo, dok sa 3.4.2 verzijom jeste (onaj koji dolazi sa Dev C++ 4.9.9.2)
I ♥ ♀

Ovaj post je zlata vrijedan!
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
89.216.236.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: cudano ponasanje koda20.11.2006. u 18:50 - pre 211 meseci
Evo, sada sam i probao. Borland C++ Builder 6 takodje daje rezultat (6 5), kao kod DevCc++:

Code:

#include <stdio.h>
main()
{
   int i = 5;
   printf("%d %d", i, i++); // < --- 6 5
   // printf("%d %d", i, ++i ); // < --- 6 6
   // printf("%d %d", i++, i); // < --- 5 5
   // printf("%d %d", ++i, i ); // < --- 6 5
}



 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
89.216.236.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: cudano ponasanje koda20.11.2006. u 19:06 - pre 211 meseci
BCB & MS VC++2005 Express

Code:

#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
   int i = 5;
   printf("%d %d", i, i++); // < --- BCB: 6 5 ---  MS VC++2005 Express: 5 5
   //printf("%d %d", i, ++i ); // < --- BCB: 6 6 --- MS VC++2005 Express: 6 6
   //printf("%d %d", i++, i); // < --- BCB: 5 5 --- MS VC++2005 Express: 5 5
   //printf("%d %d", ++i, i ); // < --- BCB: 6 5 --- MS VC++2005 Express: 6 6
   return 0;
}

 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: cudano ponasanje koda20.11.2006. u 19:08 - pre 211 meseci
u pravu je x-files.
Parametri funkcija se izvrsavaju s desna na lijevo, tako da ce se prvo izvrsiti i++, pa onda i.
Tekuca naredba je i++, a ne citava printf funkcija.
Pozdrav!

 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
89.216.236.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: cudano ponasanje koda20.11.2006. u 20:05 - pre 211 meseci
Ja pitah na Borland-ovim forumima i tamo rekose da se radi o nedefinisanom slucaju,
pa su u tom smislu - oba resenja tacna.

Kažu, Google-uj: sequence point
http://www.embedded.com/shared...rticle.jhtml?articleID=9900661
 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: cudano ponasanje koda20.11.2006. u 20:35 - pre 211 meseci
cudi da ovo nije standardizovano.
 
Odgovor na temu

igac
Banjaluka

Član broj: 415
Poruke: 562
*.dialup.blic.net.



+2 Profil

icon Re: cudano ponasanje koda20.11.2006. u 20:43 - pre 211 meseci
takav slucaj i jeste nedefinisan... npr na elektrijadi smo pitali sta ako bude takav slucaj?
ja sam se zalagao za slucaj da se ide sa desna u lijevo jer se tako stavljaju argumenti na stack pa tom logikom ce ici sa desna u lijevo ali prof. rekli da je nedefinisano, zavisi od kompajlera i kao 100% nece tako nesto biti na takmicenju:)
a i treba to izbjegavati ili mozda standard puci neki (a kao neko ce se toga drzati...:))
"nice town, i'll take it..."
 
Odgovor na temu

Buffy
Stanko Culaja
Sipovo, BiH

Član broj: 45310
Poruke: 312
*.teol.net.



Profil

icon Re: cudano ponasanje koda20.11.2006. u 21:00 - pre 211 meseci
ipak meni je izlaz 6, 5 najprihvatljiviji. Logicno je.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.lionbridge.com.



+6 Profil

icon Re: cudano ponasanje koda20.11.2006. u 21:06 - pre 211 meseci
http://www.research.att.com/~bs/bs_faq2.html#evaluation-order
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
89.216.236.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: cudano ponasanje koda20.11.2006. u 21:13 - pre 211 meseci
Promena opcija optimizacije kompajlera moze dovesti do predvidljivog redosleda operacija,
(ako je poenta do kompatibilnosti) ali opet, slucaj je kao sto pise Stroustrup - nedefinisan.

 
Odgovor na temu

caboom
Igor Bogicevic
bgd

Član broj: 255
Poruke: 1503
*.dynamic.sbb.co.yu.

ICQ: 60630914


+1 Profil

icon Re: cudano ponasanje koda20.11.2006. u 22:58 - pre 211 meseci
hah :) ovo pitanje sam imao za contracting u BofA i bilo je zabavno sto osoba koja me je intervjuisala nije znala tacan odgovor. btw. ovo je nedefinisan primer koji se cesto nalazi po matorom kodu i cesto zahvaljujuci njemu izlecu "voodoo" problemi prilikom upgrade-a na novi dev environment.
 
Odgovor na temu

cynique
Ivan Štambuk
Zagreb@Croatia

Član broj: 93690
Poruke: 155
*.cc.fer.hr.

ICQ: 106979934
Sajt: istambuk.blogspot.com


Profil

icon Re: cudano ponasanje koda21.11.2006. u 16:44 - pre 211 meseci
Redoslijed evaluacije operanada u izrazu nikad nije definiran, i stoga nije nimalo zdravo pisati izraze u kojima jedan operand ovisi o vrijednosti drugog.

Općenito kad kompajler izgradi generativno stablo (derivation tree) prilikom interpretiranja nekog niza simbola koji predstavlja izraz programskog jezika, definirana pravila prednosti (precedence) i asocijativnosti nad operatorima određuju načine grupiranja dijelova izraza u zajedničkom podstablu (npr. zagradama) - redoslijed izvođenja operacija jest definiran, redoslijed evaluiranja listova stabla nije.

Isto vrijedi i za aritmetičko-logičke izraze kao u gornjem primjeru, kao i za sve ostale - npr. ulančavanje sa <<, redoslijed evaluacije argumenata funkcije u striktnim jezicima (većina slijeva-nadesno, ali neki (OCaml) zdesna-nalijevo, valjda ovisno kako standard diktira :) i sl.

Rule of thumb: jedna naredba -> jedan side-effect (dakle ne npr. naredba koja istovremeno i baca iznimku i radio I/O).
 
Odgovor na temu

[es] :: C/C++ programiranje :: cudano ponasanje koda

[ Pregleda: 4643 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

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