A következõ elméletet bátyám blogjáról szedtem, ami eredetileg java-ra lett implementálva, de én utánanéztem, és ugyanaz a jelenség.
Eredeti cikk:
http://www.soluron.net/2010/08/ertekadas.htmlKicsit pawn-hoz módosítva mondom el nektek.
Tehát, bizonyára sokan alkalmazzák ezt a rövidítést: x += y
Errõl, mindenki azt hiszi, hogy ez az x = x + y mûveletnek a rövidítése.
Pedig nem így van.
a linken ott van a full jelentése az x += y mûveletnek, de leírom másképpEzen mûvelet rejteget egyet s mást.
Java-san írva: x = (type) (x + y)
Mit is jelent ez nekünk?
Lényegében semmit. De itt jön a cifra. Pawn-ban ugyanúgy vannak bájtok, és integerek.
A type maga a változó típusát jelenti, ami itt a Pawn-ban is jelen van, csak nem tudjuk lekérdezni alapból.
Ez a \"rövidítés\" nem is okoz gondot, ha ugyanolyan típusú változókkal dolgozunk.
Szóval a lényeg.
Vegyünk egy példát:
Van egy integer változónk: x
És egy bájtunk: y
x értéke legyen akkor 127
y értéke 1
A kettõt ezzel a mûvelettel össze adjuk.
x += y
Ami történik:
Az x váltózónk értéke nem lehet 128, mivel NEM fér bele a bájtba. De! A kódot a fordító szépen megoldja, és fut is, mert nem látja a rejtett dolgokat. Ha valaki ilyesmi bugot fedez fel, akkor ez emiatt a jelenség miatt van. (jelenleg nincs bizonyíték, mert konkrét bájt változókat nem használunk Pawn-ban)
a végét lehagytam, mivel az csak java-ban van jelen