RE: C: co lze očekávat
Miroslav Draxal
evik na volny.cz
Pondělí Srpen 29 12:55:37 CEST 2016
Teď jsem to nějak přelouskal, a to je tedy síla. No nazdar.
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav Draxal
Sent: Monday, August 29, 2016 12:53 PM
To: 'HW-news'
Subject: RE: C: co lze očekávat
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 <mailto:jindroush na seznam.cz> <jindroush na seznam.cz>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20160829/9e57bb8a/attachment.html>
Další informace o konferenci Hw-list