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



Teraz jest 13 sty 2025, o 15:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 22 sie 2016, o 11:00 
Offline
Użytkownik

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

Witam,
Koledzy tworzę sobie funkcje do obsługi kilku peryferiów w osobnym pliku w projekcie, potrzebuję w obszarze tego pliku mieć zmienną globalną ale nie chcę żeby była widziana "z zewnątrz". Dodatkowo funkcja ta będzie wykorzystywana w przerwaniu, w związku z tym użyję specyfikatora volatile i static, pytanie który zapis jest
poprawny? A może obydwa?
1)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2016, o 11:05 
Offline
Moderator
Avatar użytkownika

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

Nie będzie widziana na zewnątrz przecież jeśli nie dasz specyfikatora extern ....

Poza tym co to u ciebie oznacza, że "funkcja będzie wykorzystywana w przerwaniu" ? Staraj się unikać wywoływania funkcji z przerwań dokąd oczywiście się da - a jeśli już się nie da ... i ta zmienna będzie używana TYLKO w tej funkcji używanej w przerwaniu zaś ta funkcja nie będzie nigdzie indziej używana w programie głównym to w ogóle nie potrzebujesz nawet volatile.

_________________
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: 22 sie 2016, o 11:35 
Offline
Użytkownik

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

Źle się wyraziłem pisząc "funkcja ta będzie wykorzystywana w przerwaniu", miało być "zmienna ta będzie wykorzystywana w przerwaniu".
Zgadza się, nie dodam extern ale pamiętam zdanie z BB że użycie static (prócz podstawowej funkcji odnoszącej się do zmiennych lokalnych) powoduje że funkcje i zmienne nie są widoczne w innych plikach to pomyślałem sobie "a co tam, użyję" :D
Ale teraz to już nie wiem, wystarczy nie używać ani extern ani static i zmienne globalne nie będą widziane w innych plikach?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2016, o 11:41 
Offline
Moderator
Avatar użytkownika

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

Chodzi o to, że jak się użyje static ;) to wtedy nawet nie uda się zadziałać ze specyfikatorem extern ponieważ kompilator podda funkcje i zmienne specyficznej własnej optymalizacji. I Qniec. O tym pisałem w książce.

Jeśli zaś nie dasz static i nie dasz extern to zmienna albo funkcja wprawdzie nie będzie dostępna na zewnątrz ale gdy ktoś spróbuje jej użyć np w main.c to nie dostanie errora tylko warninga ponieważ kompilator ogłosi że tylko domyśla się gdzie ona się znajduje i spróbuje jej użyć ale nie odpowiada za skutki tej decyzji - rozumiesz? Czyli dla kogoś kto pisze program zgodnie z zasadami i zajrzy do pliku *.h i tam nie zobaczy zmiennej ze specyfikatorem extern to nawet nie będzie próbował jej użyć.


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: 22 sie 2016, o 11:48 
Offline
Użytkownik

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

Teraz rozumiem, bardzo dziękuję Panie Mirku :) a co do tej kolejności zapisu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


który jest poprawny?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2016, o 12:26 
Offline
Moderator
Avatar użytkownika

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

nie pamiętam - a co generuje ci to błędy ? warningi ? sprawdzałeś ? ;) No przecież jak nie ma ani błędu ani warninga to co za problem ? ;)

_________________
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: 22 sie 2016, o 12:35 
Offline
Użytkownik

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

nie generuje błędów ani warningów i wszytko pięknie działa, chcę tylko żeby kod był napisany jak należy :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2016, o 13:28 
Offline
Moderator
Avatar użytkownika

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

Jarecki napisał(a):
chcę tylko żeby kod był napisany jak należy


To ja bym pisał

volatile static ....

;)


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: 22 sie 2016, o 13:37 
Offline
Użytkownik

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

bardzo dziękuję za pomoc Panie Mirku :) Pan ma tyle na głowie a ja tu z takimi pchłami wyskakuję :lol:



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

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

Jarecki napisał(a):
bardzo dziękuję za pomoc Panie Mirku :) Pan ma tyle na głowie a ja tu z takimi pchłami wyskakuję :lol:

Nawet nie wiesz jak serce rośnie gdy widać, że ktoś się również stara zachować super porządek w kodzie ... to miłe ale też wg mnie bardzo ważne .... co zawsze powtarzam.

_________________
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: 22 sie 2016, o 19:17 
Offline
Użytkownik

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

Na początku przygody z programowaniem nie przywiązywałem do tego uwagi ale z czasem jak zacząłem pisać dłuższe programy a następnie nawet po kilku dniach próba zmiany czegokolwiek to były godziny spędzone nad zastanawianiem co autor miał na myśli :lol: Dlatego teraz staram sie komentować każdą linijkę i unikać zmiennych globalnych :D ale to dzięki Panu Panie Mirku :) Pan przekazuje w poradnikach i książkach mnóstwo informacji na temat pisania dobrego kodu w elegancki sposób :) Jestem Panu za to bardzo wdzięczny :)



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

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