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



Teraz jest 24 kwi 2024, o 08:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 15 gru 2017, o 22:11 
Offline
Użytkownik

Dołączył(a): 03 lut 2016
Posty: 126
Pomógł: 0

W książę Pana Kardasia „Mikrokontrolery AVR język C podstawy programowania” wydanie 1 na stronie 130, w rozdziale o plikach *.c i *.h projektu jest napisane:
Cytuj:
…Natomiast jeśli zechcesz świadomie wręcz uniemożliwić wykorzystanie pewnych drobnych funkcji narzędziowych, które są wykorzystywane tylko przez funkcje udostępniane, to możesz skorzystać z przydomku, static. Te funkcje, które mają być niewidoczne, zaopatrzysz w słówko static na początku. Podobnie możesz postąpić ze zmiennymi globalnymi. Może się również okazać po analizie, że tylko niektóre będą nadawały się do udostępniana na potrzeby innych modułów. Wtedy tylko te wybrane deklaracje zmiennych wraz z ze słówkiem extern na początku wstawisz do pliku klawiatura.h…


I teraz w związku z tym mam takie pytania:
1. Czy słówka static i extern mają takie samo działanie zarówno dla funkcji jaki zmiennych?
2. Czy słówka static i extern muszą poprzedzać każdą deklarację zmiennych i funkcji w plikach *.c i *.h?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2017, o 00:33 
Offline
Moderator
Avatar użytkownika

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

11jacekj napisał(a):
1. Czy słówka static i extern mają takie samo działanie zarówno dla funkcji jaki zmiennych?


TAK - chociaż dla funkcji tzn nagłówków funkcji w plikach *.h można je pomijać bo sam nagłówek funkcji łatwo odróżnić - brak ciała funkcji ;) A jak dodasz extern - (nie próbowałeś jeszcze - chociażby tak z ciekawości?) to zobaczysz że też będą śmigać jak bez extern

11jacekj napisał(a):
2. Czy słówka static i extern muszą poprzedzać każdą deklarację zmiennych i funkcji w plikach *.c i *.h?


zrozum jeśli dla DEKLARACJI zmiennej nie podasz extern - to zostanie potraktowana jako DEFINICJA i będziesz miał zduplikowaną definicję. Zaś dla funkcji tak jak napisałem wyżej


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: 16 gru 2017, o 00:45 
Offline
Użytkownik

Dołączył(a): 03 lut 2016
Posty: 126
Pomógł: 0

mirekk36 napisał(a):
A jak dodasz extern - (nie próbowałeś jeszcze - chociażby tak z ciekawości?)

Nie próbowałem jeszcze bo puki kupię podzespoły i programator, chcę jako tako opanować teorię (na spokojnie, ze zrozumiem przeczytać i jak najwięcej zapamiętać od początku książki do rozdziału z praktyką), myślę że to pozwoliło by mi na lepszy początek. Ale aż nie mogę się doczekać kiedy moja pierwsza dioda zacznie migać.
Jak mawiają Niemcy: "langsam, langsam aber genau"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2017, o 00:55 
Offline
Moderator
Avatar użytkownika

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

11jacekj napisał(a):
Jak mawiają Niemcy: "langsam, langsam aber genau"

Ja naturlich :D ... powodzenia - a jak jeszcze jakieś pytania to śmiało pisz

za to co do przetestowania tego o czym pisałem - to tylko sprawa kompilatora więc możesz przetestować na sucho w sensie czy się kompiluje, czy wywali ci błędy itp itd - też warto się z tym obeznać

_________________
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: 17 gru 2017, o 21:54 
Offline
Użytkownik

Dołączył(a): 03 lut 2016
Posty: 126
Pomógł: 0

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

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

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


Dla testów tak jak podpowiada mirekk36 wstawiam static, extern i pomijam oba te słowa przed deklaracją funkcji led w piku led.h. Za każdym razem po kompilacji w pliku led.c pojawia mi się taki warings
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jeśli kliknę ponownie kompilację to już ten warings znika. Przejmować się nim bardzo czy nie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2017, o 21:57 
Offline
Moderator
Avatar użytkownika

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

11jacekj napisał(a):
int main (void){
        void led ();
}

no bo po jaki gwint wpisujesz tu "void" co to ma niby być ?

1. wywołanie funkcji ?
2. deklaracja funkcji ?
3. no chyba nie definicja funkcji ?

;)

_________________
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: 17 gru 2017, o 21:58 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2562
Pomógł: 126

Warningi są pomijane przy powtórnych kompilacjach, dlatego niektórzy myślą, że ‚kompilator się naprawił’. Zrób Clean projektu a znów się pojawi. Więc trzeba kod poprawić. P.s. Ściągnij sobie MkClipse’a, on zawsze robi clean’a przed kompilacją i ma ooza tym pare fajnych udogodnień.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2017, o 20:37 
Offline
Użytkownik

Dołączył(a): 03 lut 2016
Posty: 126
Pomógł: 0

mirekk36 napisał(a):
11jacekj napisał(a):
int main (void){
        void led ();
}

no bo po jaki gwint wpisujesz tu "void" co to ma niby być ?

1. wywołanie funkcji ?
2. deklaracja funkcji ?
3. no chyba nie definicja funkcji ?

;)

Co racja to racja. Poza tym gdzie w pliku main.c mam
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

D... ze mnie nie programista.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 gru 2017, o 21:04 
Offline
Moderator
Avatar użytkownika

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

11jacekj napisał(a):
D... ze mnie nie programista.

No tak to nie można mówić, to są .... zwykłe pomyłki, jak literówki w tekście, czasem po prostu coś za szybko robimy, jakieś przypadkowe copy&paste i problem gotowy - a oko nie chce wychwycić - jeśli komunikat nie jest oczywisty ... Mnie też się takie coś zdarza i się tego nie wstydzę ;)

Niestety życie programisty nie polega na tym, że poświęcamy 100% czasu na pisanie sprawnego kodu, wręcz odwrotnie ;)

50% czasu na pisanie kodu a drugie 50% czasu na poprawianie błędów. Oczywiście ten stosunek czasem się troszkę zmienia ale nie drastycznie ;)

_________________
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: 9 ] 

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