OT: c: mismatched comparison
Pavel Hudeček
edizon na seznam.cz
Pondělí Červenec 29 14:30:37 CEST 2024
V podobné situaci bych udělal spíš (uint8_t)1 aby to přetypování bylo
hned v místě kde k němu vzniká důvod a ne to naopak napřed přetypovat
špatně a pak o úroveň vejš opravovat:-)
PH
Dne 29.07.2024 v 14:22 Miroslav Draxal napsal(a):
>
> Dobře, jak jsem psal, je možno (v programu není možno, je to
> ošetřeno) přetéct z 0 do 255.
>
> Tak něnaj zapomínám, že C i když má uint8_t byt a od toho odečte 1u,
> tak z toho může vzniknout uint16_t
>
> Tak holt
>
> if (RucneCisloSekce == (uint8_t) (CisloSekce - 1u)) {
>
> NOP();
>
> }
>
> Míra
>
> *From:*Hw-list [mailto:hw-list-bounces na list.hw.cz] *On Behalf Of
> *Pavel Hudeček
> *Sent:* Monday, July 29, 2024 1:41 PM
> *To:* hw-list na list.hw.cz
> *Subject:* Re: OT: c: mismatched comparison
>
> Výsledkem (CisloSekce - 1u) je něco uint16 a to něco může nabývat
> hodnot nad 255.
>
> PH
>
> Dne 29.07.2024 v 13:23 Miroslav Draxal napsal(a):
>
> Dobrý den ve spolek.
>
> Už delší dobu si lámu hlavu nad tím, co se nelíbí překladači. Je
> to tedy vyseparované z daleko složitější podmínky, ale tohle ten
> problém způsobuje.
>
> Microchip
>
> XC8 ver.2.46
>
> uint8_t RucneCisloSekce;
>
> uint8_t CisloSekce;
>
> if (RucneCisloSekce == (CisloSekce - 1u)) {
>
> NOP();
>
> }
>
> Hlásí warning: (764) mismatched comparison
>
> Což je
>
> (764) mismatched comparison (Code Generator)
>
> A comparison is being made between a variable or expression and a
> constant value which is not in
>
> the range of possible values for that expression, for example:
>
> unsigned char c;
>
> if(c > 300) /* oops -- how can this be true? */
>
> close();
>
> pokud odstraním -1, potom OK.
>
> Ano, může to přetéct z 0x00 do 0xff, ale to není „mismatched
> comparison“
>
> ???
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240729/2a6b95ba/attachment-0001.htm>
Další informace o konferenci Hw-list