RE: C: co lze očekávat

Miroslav Draxal evik na volny.cz
Pondělí Srpen 29 13:02:06 CEST 2016


V tom odkazu je to dost jasně popsané. Mě zmátlo, jak jste posílal x—(asi spíše mělo byt x+1)

Problém je, že v C přemýšlím jako v ASM.

Díky

 

PS. Nějak jsem předpokládal, že X je char, tak se k tomu bude kompilátor všude chovat jako k char. 

 

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jindroush
Sent: Monday, August 29, 2016 12:57 PM
To: HW-news
Subject: Re: C: co lze očekávat

 

Proste ukazovat pointerem mimo objekt a pak nad nim delat aritmetiku je nedefinovane chovani. Reseni neni rozcilovani, ale uprava kodu tak, aby dochazelo jen k definovanemu chovani.
J.

On 29.8.2016 12:53, Miroslav Draxal wrote:

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>






_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list

 





-- 
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/9e90f504/attachment.html>


Další informace o konferenci Hw-list