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