Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 20 mar 2026, o 04:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 8 lip 2016, o 14:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 cze 2014
Posty: 76
Pomógł: 10

Witam serdecznie, mam pewnie bardzo mały i drobny problem. Otóż mam funkcję:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wywołuje ją w ten sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Problem w zrozumieniu leży w tym, że zmienna data jest
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
- innego typu, a kompilacja przechodzi bez żadnego problemu, nawet warninga.

_________________
:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2016, o 15:21 
Offline
Użytkownik

Dołączył(a): 08 lut 2015
Posty: 132
Pomógł: 4

Wydaje mi się, że następuje tutaj niejawne rzutowanie typów uint16_t na uint8_t. Efektem tego może być zapisanie w zmiennej "bajtek" tylko pierwszego bajtu dwubajtowej zmiennej "data".


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2016, o 15:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Jest to tak zwane niejawne rzutowanie typu uint16_t na uint8_t. Kompilator GCC nie widzi tutaj problemu, inne kompilatory mogą sygnalizować takie niejawne rzutowanie warningiem, a nawet błędem.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2016, o 15:52 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

Tak jak napisali koledzy wcześniej ja tylko dodam, że akurat rzutowanie w tym przypadku podczas przypisania zmiennej 8-bitowej do zmiennej 16-bitowej podczas gdy obydwie są typu uint ... może nastąpić absolutnie bezstratnie - to dlatego w takiej sytuacji może bez najmniejszego problemu zajść niejawne rzutowanie.

Gdybyś chciał zrobić

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


no to już jak sam się domyślasz bez stratnie nie dałoby się tego zrobić - i wtedy kompilator zdecydowanie by się przypomniał warningiem


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lip 2016, o 12:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 cze 2014
Posty: 76
Pomógł: 10

Wszystko jasne, dzięki!

_________________
:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO