C: co lze očekávat
Hynek Sladky
econf na centrum.cz
Pondělí Srpen 29 13:27:28 CEST 2016
Cekal bych, ze se x+1 vyhodnoti jako int.
Pro spravne chovani bych to obalil bitovym maskovanim:
arrayA[(x+1)&0xFF]
Hynek Sladky
Dne 29.8.2016 12:53, Miroslav Draxal napsal(a):
>
> Je to hodně zjednodušené, to x se používá v programu. Nějak nerozumím
> tomu, že si kompilátátor může dělat co chce. Je to char, obsahuje
> hodnotu 0xff, po odečtení musí přetéct do nuly.
>
> *From:*Hw-list [mailto:hw-list-bounces na list.hw.cz] *On Behalf Of
> *Jindroush
> *Sent:* Monday, August 29, 2016 12:35 PM
> *To:* HW-news
> *Subject:* Re: C: co lze očekávat
>
> Asi prijdu s Wekem po funuse, ale obecne je to x-- undefined behaviour
> a kompilator muze delat, co chce ;-)
>
> http://stackoverflow.com/questions/18186987/decrementing-a-pointer-out-of-bounds-incrementing-it-into-bounds
> i s odkazy na c99
>
> On 29.8.2016 12:22, Miroslav Draxal wrote:
>
> Dobrý den,
>
> Minulý týden jsem zde dával report o pnou předpokládané chybě c
> XC8. Nějak v tom tápe i Michrochip. Mám dojem, že na tam mají
> zaměstnaného studenta, který filtruje zprávy. Jednou píše že je to
> OK, jednou že je to chyba. Co na to zdejší odborníci na C. O co jde.
>
> Mějme následující kód.
>
> char arrayA[3]@0x123;
>
> char x;
>
> x = 0;
>
> x--; // x=0xff
>
> if ( arrayA[x + 1]) {........}
>
> z jaké adresy má brát if prvek z pole array? Jedná se mi o ten
> konstrukt x+1. X je char, čili přeteče na 0x00. Má ukazovat na
> 0x123 nebo má brát konstrukt arrayA[x + 1]) přetečení a ukazovat
> na 0x223?
>
> U XC8 to teď to je tak, že pokud je array uloženo na 0x023 tak
> toto ukazuje na adresu 0x023 a pokud je array uloženo na 0x123 tak
> to ukazuje na adresu 0x223.
>
> Jak to tedy je?
>
>
>
> --
> Jindroush<jindroush na seznam.cz> <mailto:jindroush na seznam.cz>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20160829/45a1af69/attachment-0001.html>
Další informace o konferenci Hw-list