OT: c: mismatched comparison

Miroslav Draxal evik na volny.cz
Pondělí Červenec 29 20:24:09 CEST 2024


Smysl to dává, jenom mě osobně nedává smysl, jak unt8_t může přetéct do uin16_t. Mě by spíš dávaly smysl, když mám proměnnou definovanou jako uint8_t tak ať s ní udělám cokoli, stále je to uint8_t. Přetéct by to mohlo až při přetypování na int16_t.
Ale svět na to nahlíží jinak.

Míra

-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav Mraz
Sent: Monday, July 29, 2024 6:27 PM
To: hw-list na list.hw.cz
Subject: Re: OT: c: mismatched comparison

To by asi způsobilo jen další problémy. Nestudoval jsem to do detailů, 
ale patrně jakákoli aritmetická operace nad bytem (lhostejno jestli 
signed nebo unsigned) rozšíří výsledek na typ int. Takže lépe jak to 
bylo navrženo původně
if (RucneCisloSekce == (uint8_t) (CisloSekce - 1u))
nebo lépe dát (CisloSekce - 1u) do pomocné (konstantní) proměnné typu 
uint8_t. Celkem to pak dává smysl.

Mrazík

On 29. 07. 24 14:30, Pavel Hudeček wrote:
> 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“
>>
>>     ???
>>
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list