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