[elektro] C -- illegal pointer hiba

Móczik Gábor pm_levlista at progzmaster.hu
Fri Sep 27 10:08:35 CEST 2013


2013.09.27. 9:36 keltezéssel, elight at gmail.hu írta:
> Még volt egy kis elértelmezésem
> a 4 bytos szavak határra illesztésén.
> ( string kiegészítés kellő számú 0-val,
>      hogy a karakterek séáma a lezáró
>      nullával együtt oszható legyen néggyel. )
>
> Mert a
>
> next_cmd_wr_address = ( next_cmd_wr_address + ( (  ( count + 3 ) >> 2 )
> <<2 ) )  & 0x0FFF;
>
> és a
>
> next_cmd_wr_address =  ( next_cmd_wr_address + (  count + 3 ) ) & 0x0FFF;
>
> valahogy lehet,  talán nem egészen ugyanazt az eredményt adja.

Hát nem, az utóbbinál az alsó két biten bármi lehet, az előbbinél csak 
nulla. Tehát igazításra az utóbbi szerintem nem lehet jó, hacsak nem 
rosszul másoltad ide, és a kódban végülis más van.

Az előbbinek kellene jónak lennie, de a shift operátorral szokott lenni 
szívás, többek között a sign extension, typecast és egyéb vicces dolgok 
miatt.

Szerintem írj simán *4, és /4 utasításokat. Egy valamire való fordító 
ismeri ezeket és automatikusan bitszintű shift utasítást fog fordítani, 
de akkor olyat, amivel matematikailag stimmel majd az eredmény.

Elvileg az előbbi a jó, mert a második utasítás nem igazít 32 bitre...

Arra jöttem rá, hogy ma már elég fejlettek a fordítók, ha nem 
komplikált, egyértelmű, szokványos kódot írsz, akkor a fordító felismeri 
ezeket a programozási mintákat, és optimális megoldást fordít hozzá. Ha 
nagyon nekiáll az ember bitfaragni, akkor nem ismeri fel mit akarsz, 
lefordítja a bitfaragást úgy ahogy odaírtad, ami vagy jó vagy nem, vagy 
optimális vagy nem, attól függően, hogy elég jól ismered-e a C, az adott 
fordító és az célarchitektúra működésést.

Szóval írj egyszerű megoldásokat, utána nézd meg az asm listet, ha nem 
találta ki, akkor kezdd el csak kézzel faragni.



More information about the Elektro mailing list