Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
keby niekto napisal taky kod v realite do realneho SW tak by som ho poslal rovno na psychiatricke vy…
MM.. 08.03.2011 18:26
MM..
kedze sa pracuje s jednou premennou x tak je to jedno, kedze sa nakoniec vykonaju vsetky operacie na…
wam_Spider007 09.03.2011 16:57
wam_Spider007
Nemas pravdu, neni to jedno pretoze ++x znamena ze sa to ma urobit pred vsetkymi ostatnymi operaciam…
MM.. 09.03.2011 20:23
MM..
Ked urobim x=10; y= ++x; tak y by malo byt 11. x=10; y= x++; tak y by malo byt 10. v tomto sa zhod… nový
wam_Spider007 09.03.2011 22:18
wam_Spider007
Dal som tam smajl :) Ano mozne spravne vysledky su 32, 33, a 34. Cokolvek z toho compiler urobi je s… poslední
MM.. 09.03.2011 23:41
MM..
...jednoznacny vysledok by to davalo lebn vtedy keby bolo niekde jasne zadefinovane ze premenne vstu… nový
MM.. 09.03.2011 20:51
MM..

keby niekto napisal taky kod v realite do realneho SW tak by som ho poslal rovno na psychiatricke vysetrenie.
Vysledok asi moze zavisiet od compilera, myslim ale ze to bude 34 (alebo 33 ak to compiler parsuje zprava), ale moze byt iny je to dost nejednoznacny kod.

kedze sa pracuje s jednou premennou x tak je to jedno, kedze sa nakoniec vykonaju vsetky operacie nad touto premennou. scitaju su x+x a potom sa to este pripocita k povodnemu x a nakoniec 2x sa urobi inkrementacia o 1. Je jedno v akom poradi. Vysledok je vzdy rovnaky 32.
Inak keby si tam zakomponoval inu premennu, tak by to bolo tazsie:

a=10;
x=10;
a += ++x + x++;

a=??

Nemas pravdu, neni to jedno pretoze ++x znamena ze sa to ma urobit pred vsetkymi ostatnymi operaciami a teda vsetky ostatne operacie by mali pouzit 11 a nie 10 (takze 11+=11+11+1=34 alebo 10+=11+11+1=33). A otazka je jak to compiler pochopi. Evidentne kazdy kompiler to pochopi inac, preto by take nieco v realite pouzil len magor. P.S. a compiler ktory da v tomto pripade vysledok 32 povazujem ja osobne za zly compiler, ptz nerespektuje ++x :D)

Ked urobim
x=10;
y= ++x;
tak y by malo byt 11.

x=10;
y= x++;
tak y by malo byt 10.

Aspon tak to chapem ja, mozno to je zadefinovane v ANSI inac ale to by potom operacia ++x nemala ziaden zmysel keby to bolo stejne jak x++ a vobec by ju nemuseli definovat. A ze ++x neni to iste co x++ je kazdemu snad jasne.

Ked urobim
x=10;
y= ++x;
tak y by malo byt 11.

x=10;
y= x++;
tak y by malo byt 10.

v tomto sa zhodneme, ale nezhodnem sa asi v tom, ze kompilator, ktory da vysledok 32 je zly. Zle je len pouzitie, kedze takymto nejednoznacnym zapisom by sa mal kazdy vyhnut.

...jednoznacny vysledok by to davalo lebn vtedy keby bolo niekde jasne zadefinovane ze premenne vstupujuce do vzorca sa musia povinne bufferovat, t.j.
x += ++x + x++
by potom vyzeralo takto
buffer = x
x = x+1 //toto je ++x
x = buffer + (buffer+1) + buffer
x = x+1 //toto je x++

potom by vysledok bol jednoznacne definovany, presne 32. Ale ci to je takto v ANSI zadefinovane to zhlavy neviem, a pochybujem o tom ze to tam je (nedavalo by to moc zmysel ptz by to ciastocne negovalo efekt ++x)

Zpět do poradny Odpovědět na původní otázku Nahoru