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



Teraz jest 22 gru 2024, o 08:56


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 24 lut 2014, o 10:59 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 03 kwi 2013
Posty: 9
Lokalizacja: Gubin
Pomógł: 0

witam.
Pytanie odnośnie definicji i deklaracji zmiennej.
Czy jest możliwa deklaracja zmiennej bez wcześniejszego zdefiniowania tej zmiennej ?
Wiadomo że definicja zajmuje pamięć dla nowego obiektu i deklaruje go.
Deklaracja określa pewne własności zmiennej czy funkcji, ale zmienna zajmuje zawsze jakieś miejsce w pamięci flash, czy to eeprom, czy to ram.
wobec tego musi być zdefiniowana ( bo zajmuje miejsce ), aby później można było ja sobie deklarować, tak ? dobrze rozumiem ? :)
Czyli definiujemy zmienną typu uint_8t ( 1 bajt, od 0 do 255 ), a później w kodzie programu jak potrzebujemy "przerabiamy" deklarując tą zmienną na init8_t ( od -128 do 127 ).
dobrze myślę ?

pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2014, o 11:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 maja 2013
Posty: 562
Lokalizacja: Bydgoszcz
Pomógł: 23

No z tego co wiem jest to możliwe jednakże jest to zły nawyk programistyczny ale do końca nie jestem pewien ponieważ ja jestem nauczony zawsze taką zmienną definiować najpierw. Poza tym potem w programie mogą wystąpić dziwne zachowania takiej zmiennej bez deklaracji dlatego również wiem iż warto dawać też specyfikator volatile. Mirek na blogu wyjaśnił dlaczego warto to stosować:

http://mirekk36.blogspot.com/2011/08/test.html

Poza tym uhm no nie czarujmy się tej pamięci sporo w tych mikrokontrolerach a jak by zabrakło to zawsze można "większy" mikrokontroler albo zewnętrzną pamięć albo zoptymalizować kod np. przez wstawki asemblerowe czy jakieś inne uproszczenia formuł, funkcji.

No i sam specyfikator volatile też skraca i optymalizuje program :)



Ostatnio edytowano 24 lut 2014, o 11:39 przez Intre, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2014, o 11:39 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 03 kwi 2013
Posty: 9
Lokalizacja: Gubin
Pomógł: 0

tak, ja nie chce deklarować zmiennych bez definicji ( no bo przecież trzeba zająć jakieś miejsce w pamięci na ta zmienną ), tylko czy mój sposób myślenia jest jak najbardziej ok .

pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2014, o 14:10 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Chyba trochę koledzy pomieszaliście.
Deklaracja funkcji jest to opowiedzenie jaki typ zwraca funkcja i jakie ona przyjmuje argumenty. Deklaracje umieszcza się po to aby kompilator przechodząc przez kolejne linie kodu i trafiając na niezdefiniowaną funkcję nie zgłupiał tylko poszedł dalej wiedząc że gdzieś dalej napotka na definicję a teraz tylko wstawia odpowiednią obsługę zależną od typów. Deklaracja służy do umożliwienia użycia funkcji w danym module przed jej fizyczną definicją. Definicja dokonuje faktycznego przydzielenia miejsca w pamięci (zaadresowania). Definicja funkcji może występować bez deklaracji ale z powodów powyższych w dobrym stylu jest deklarowanie. W przypadku zmiennych deklaracja i definicja to prawie to samo. Definicja jest zarazem deklaracją o zasięgu danego bloku kodu. W celu zwiększenia widoczności zmiennej stosuje się deklarację zmiennej ( najczęściej w pliku nagłówkowym ) z atrybutem extern, żeby inne moduły/bloki kodu wiedziały co zrobić ze zmienną której nie widzą w swoich deklaracjach/definicjach.
Mieszanie do tego modyfikatora volatile chyba jest drobnym nieporozumieniem. Volatile stosuje się z zupełnie innych powodów. "Przerabianie" zmiennej uint8_t na int8_t nazywa się rzutowaniem typów i również nie ma wiele wspólnego z deklarowaniem/definiowaniem zmiennych/funkcji.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lut 2014, o 14:30 
Offline
Moderator
Avatar użytkownika

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

perlon napisał(a):
"Przerabianie" zmiennej uint8_t na int8_t nazywa się rzutowaniem typów i również nie ma wiele wspólnego z deklarowaniem/definiowaniem zmiennych/funkcji.


Amen!

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