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



Teraz jest 9 sty 2025, o 19:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 14 wrz 2016, o 08:54 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

Witam,
Koledzy analizując różne programy w C spotykam się z definicją stałych za pomocą dyrektywy "define". W jednym miejscu jest:
1)
Kod:
#define 100

w innym:
2)
Kod:
#define 100U

a jeszcze w innym:
3)
Kod:
#define (uint32_t)100


Oczywiście czytałem w BB, że literka "U" na końcu stałej dosłownej powoduje, że kompilator zapisze ją bez znaku a literka "L" jako long int. Niemniej czasem spotyka się zapis z punktu 1 czy 3 gdzie jest rzutowanie stałej dosłownej na uin32_t. Pytanie gdzie i kiedy dany zapis stosować? Jest na to prosta recepta?
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 09:43 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Tu masz wytłumaczone dlaczego: http://atnel.pl/domyslna-promocja-do-typu-int.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 09:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Zacznij od przeczytania http://atnel.pl/domyslna-promocja-do-typu-int.html

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: kilkunastu sekundach ]

O HomoChemicus był pierwszy :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 09:49 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

Panowie to dokładnie przeczytałem ale nie ma tam nic o rzutowaniu stałych definiowanych define-em :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 11:11 
Offline
Użytkownik

Dołączył(a): 29 lip 2014
Posty: 195
Pomógł: 44

Witam,

Jarecki napisał(a):
Panowie to dokładnie przeczytałem ale nie ma tam nic o rzutowaniu stałych definiowanych define-em :)

No bo preprocesor jest "głupi jak kilo gwoździ", a
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wstawia do kodu przed właściwą kompilacją 100 w miejsce XXX i tyle. A jak tego użyjesz, i czy będzie to 100U, (uint32_t)100, czy coś jeszcze, to już od Ciebie zależy. W tym konkretnym przypadku konieczność stosowania zabiegów ze 100U czy (uint32_t)100 wynika z tego co jest w linku, który Koledzy Ci podali.

Pozdrawiam, QuadMan.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 12:15 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

QuadMan napisał(a):
Witam,
No bo preprocesor jest "głupi jak kilo gwoździ", a
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wstawia do kodu przed właściwą kompilacją 100 w miejsce XXX i tyle. A jak tego użyjesz, i czy będzie to 100U, (uint32_t)100, czy coś jeszcze, to już od Ciebie zależy.
Pozdrawiam, QuadMan.


I właśnie o to mi chodzi kiedy użyć rzutowania a kiedy po prostu dopisać U lub UL?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 12:23 
Offline
Moderator
Avatar użytkownika

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

Jarecki napisał(a):
I właśnie o to mi chodzi kiedy użyć rzutowania a kiedy po prostu dopisać U lub UL?

Zadając to pytanie widać, że

1. albo nie przeczytałeś w ogóle tego artykułu o domyślnej promocji do int
2. albo nie przeczytałeś z uwagą bo sądzisz że ty pytasz o coś innego
3. albo przeczytałeś ale nie zrozumiałeś o co w tym artykule chodzi i nie dopytałeś o to czego tam nie rozumiesz ....

w związku z tym koło się zamyka i dalej pytasz o to samo

_________________
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: 14 wrz 2016, o 14:36 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

To zadam pytanie inaczej:
czym różni się:
Kod:
#define NAZWA 100UL

od:
Kod:
#define NAZWA (uint32_t)100

?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 14:45 
Offline
Moderator
Avatar użytkownika

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

niczym - jedno i drugie spowoduje, że kompilator przyjmie do obliczeń wartość 32 bitową bez znaku


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: 15 wrz 2016, o 07:31 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

I o to chodziło właśnie :) dziękuję :)



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: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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