Typy v C++

Pavel Kutina hw na prelude.cz
Pátek Leden 14 17:36:19 CET 2022


A dodatek - to je fajn, že mi to říká tím, že mi ukazuje na datový typ 
něčeho jiného :)

Proč to tedy s unsigned int projde a s uint32_t ne? Kde je ten rozdíl, který 
nevidím?

Pavel Kutina

----- Original Message ----- 
From: "Jindroush" <jindroush na seznam.cz>
To: "HW-news" <hw-list na list.hw.cz>
Sent: Friday, January 14, 2022 5:19 PM
Subject: Re: Typy v C++


Ale ten komplikator tam napovida, ze misto %X pouzit treba %lX a je
vymalovano.
Ostatne, nebylo by lepsi pouzit strtoul, ja mam z toho sscanfu vzdycky
takovy nepekny pocity?
J.

On 14.01.2022 17:12, Pavel Kutina wrote:
> Už jsem to dohledal:
>
> ////unsigned int cnt = 0; // tohle je bez výhrad
> uint32_t cnt = 0;
> sscanf(pData, "%X", &cnt);
>
> ../src/receive.cpp:117:19: warning: format '%X' expects argument of type 
> 'unsigned int*', but argument 3 has type 'uint32_t*' {aka 'long unsigned 
> int*'} [-Wformat=]
> 117 | sscanf(pData, "%X", &cnt);
> | ~^ ~~~~
> | | |
> | | uint32_t* {aka long unsigned int*}
> | unsigned int*
> | %lX
>
>
> Pokud to deklaruju jako 16bit:
>
> uint16_t cnt = 0;
> sscanf(pData, "%X", &cnt);
>
> ../src/receive.cpp:117:19: warning: format '%X' expects argument of type 
> 'unsigned int*', but argument 3 has type 'uint16_t*' {aka 'short unsigned 
> int*'} [-Wformat=]
> 117 | sscanf(pData, "%X", &cnt);
> | ~^ ~~~~
> | | |
> | | uint16_t* {aka short unsigned int*}
> | unsigned int*
> | %hX
>
>
> Jinak to je pro STM32L471, máme ještě pár kousků "z předválečných zásob".
>
> Pavel Kutina
>
>
> ----- Original Message ----- From: "Tomáš Hamouz" 
> <konfery.tomas.hamouz na seznam.cz>
> To: "HW-news" <hw-list na list.hw.cz>
> Sent: Friday, January 14, 2022 5:01 PM
> Subject: Re: Typy v C++
>
>
> A nebyl to pointer na unsigned? Pokud bys tam strčil *uint16_t tak by
> došlo k přepsání dat.
>
> Jinak délka int a unsigned int jsou implementačně závislé, musí jen
> platit že
>
> sizeof(short) <= sizeof(int) <= sizeof(long)
>
> Všimni si že short může být stejně dlouhý jako long a bude to podle
> normy ;-)
>
> Tomáš
>
>
>
>> No nezbývá, než se naučit dávat si na to bacha :(
>
>> A ten rozdíl mezi unsigned int a uint16_t (uint8_t, uint32_t atd.) taky
>> někdo umíte vysvětlit? Vyřval mne sscanf a tam jsem tio vzdal a 
>> příslušnou
>> proměnnou deklaroval jako unsigned int (bohužel přslušná část kódu prošla
>> demolicí, teď to nedokážu zrekonstruovat).
>
>> Jinak jaké je doporušení? Pro mne je deklarace přes ty přetypované _t
>> přehlednější, ale nejspíš to nemusí být vždycky totéž.
>
>> Pavel Kutina
>
>
>> ----- Original Message ----- From: "Jindroush" <jindroush na seznam.cz>
>> To: "HW-news" <hw-list na list.hw.cz>
>> Sent: Friday, January 14, 2022 4:30 PM
>> Subject: Re: Typy v C++
>
>
>> odpoved uz dosla s vysvetlenim... Jinak jsem to nacpal do
>> https://cppinsights.io/
>
>> a zaskrtl, at ukaze implicitni konverze, tam je to videt na vlastni voko
>> if((static_cast<unsigned int>(static_cast<int>(LastCounter) + 1)) == cnt) 
>> {
>
>> On 14.01.2022 16:13, Pavel Kutina wrote:
>>> Zdravím,
>>>
>>> opět něco nechápu, můžete mne poštouchnout?
>>>
>>> Píšu FW v STM Cube, mám deklarované dvě proměnné:
>>>
>>> unsigned int cnt = 0;
>>> uint16_t LastCounter = 0;
>>>
>>> při porovnání v:
>>>
>>> if (LastCounter+1 == cnt)
>>>
>>> mi to píše warning:
>>> ../src/receive.cpp:129:22: warning: comparison of integer expressions of
>>> different signedness: 'int' and 'unsigned int' [-Wsign-compare]
>>> 129 | if ( (LastCounter+1) == cnt)
>>> | ~~~~~~~~~~~~~~^~~~~~
>>>
>>> Chápu dobře, že unsigned int a uint16_t nejsou znaménkově kompatibilní
>>> typy? Proč ne?
>>>
>>> Na něco podbného jsem narazil před chvílí u sscanf, kde se mi to zase
>>> vztekalo pri použití uint16_t (jsem tam měl) místo unsigned int (který 
>>> to
>>> chtělo).
>>>
>>> Popravdě, asi 90% času tohoto projektu trávím rovnáním datových typů,
>>> hodne v tom plavu :(
>>>
>>> Díky.
>>>
>>> Pavel Kutina
>>>
>>> _______________________________________________
>>> 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
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


-- 
Jindroush <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 



Další informace o konferenci Hw-list