OT: c: mismatched comparison
Miroslav Draxal
evik na volny.cz
Pondělí Červenec 29 14:22:17 CEST 2024
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“
???
Díky za vysvětlení, Míra
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240729/2da4f449/attachment.htm>
Další informace o konferenci Hw-list