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

cudano ponasanje koda

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

[ Pregleda: 1626 | Odgovora: 14 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mosho

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



Profil

icon cudano ponasanje koda20.11.2006. u 15:10

Dev c++
kod:
#include <stdio.h>
main()
{
int i = 5;
printf("%d %d", i, i++);
}

ispis: 6 5

Molim komentar
20.11.2006. u 15:10 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: cudano ponasanje koda20.11.2006. u 15:28
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


FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
20.11.2006. u 15:28 

toxi_programer
Nemanja Todić
Beograd

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

Sajt: www.todicsoft.com


Profil

icon Re: cudano ponasanje koda20.11.2006. u 16:55
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...
20.11.2006. u 16:55 

icobh
Igor Pejašinović
PEJAŠINOVIĆ LTD.
Stara Dubrava, RS, BiH

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

Sajt: localhost


Profil

icon Re: Čudno ponašanje koda20.11.2006. u 18:15
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!
20.11.2006. u 18:15 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: cudano ponasanje koda20.11.2006. u 18:50
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
}




FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
20.11.2006. u 18:50 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: cudano ponasanje koda20.11.2006. u 19:06
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;
}


FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
20.11.2006. u 19:06 

Buffy
Stanko Culaja
za sada sam nezaposlen!
Sipovo,Republika Srpska

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

Sajt: www.sipovo.org


Profil

icon Re: cudano ponasanje koda20.11.2006. u 19:08
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!

SAMO DA RATA NE BUDE,
LUDILA MEDJU LJUDIMA,
VELIKI NUDE ZABLUDE,
PLASE NAS RAZNIM CUDIMA
I SVAKOJ BAJCI NAUDE,
DA RATA NE BUDE.

Djordje Balasevic
20.11.2006. u 19:08 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

icon Re: cudano ponasanje koda20.11.2006. u 20:05
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
FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
20.11.2006. u 20:05 

Buffy
Stanko Culaja
za sada sam nezaposlen!
Sipovo,Republika Srpska

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

Sajt: www.sipovo.org


Profil

icon Re: cudano ponasanje koda20.11.2006. u 20:35
cudi da ovo nije standardizovano.
SAMO DA RATA NE BUDE,
LUDILA MEDJU LJUDIMA,
VELIKI NUDE ZABLUDE,
PLASE NAS RAZNIM CUDIMA
I SVAKOJ BAJCI NAUDE,
DA RATA NE BUDE.

Djordje Balasevic
20.11.2006. u 20:35 

igac
Banjaluka

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



Profil

icon Re: cudano ponasanje koda20.11.2006. u 20:43
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..."
20.11.2006. u 20:43 

Buffy
Stanko Culaja
za sada sam nezaposlen!
Sipovo,Republika Srpska

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

Sajt: www.sipovo.org


Profil

icon Re: cudano ponasanje koda20.11.2006. u 21:00
ipak meni je izlaz 6, 5 najprihvatljiviji. Logicno je.
SAMO DA RATA NE BUDE,
LUDILA MEDJU LJUDIMA,
VELIKI NUDE ZABLUDE,
PLASE NAS RAZNIM CUDIMA
I SVAKOJ BAJCI NAUDE,
DA RATA NE BUDE.

Djordje Balasevic
20.11.2006. u 21:00 

Dragi Tata

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

Sajt: www.novetehnologije.com


Profil

icon Re: cudano ponasanje koda20.11.2006. u 21:06
http://www.research.att.com/~bs/bs_faq2.html#evaluation-order
20.11.2006. u 21:06 

X Files
Vladimir Stefanovic
Pozarevac

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

Jabber: xfiles@elitesecurity.org
Sajt: www.antivari.com


Profil

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


FREEWARE
Di rečnik, v1.0.058 (srp-eng/eng-srp priručni rečnik)
http://www.antivari.com
20.11.2006. u 21:13 

caboom
Igor Bogicevic
bgd

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

ICQ: 60630914


Profil

icon Re: cudano ponasanje koda20.11.2006. u 22:58
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.
20.11.2006. u 22:58 

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
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).
21.11.2006. u 16:44 

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

[ Pregleda: 1626 | Odgovora: 14 ]

Postavi temu Odgovori

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