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



Teraz jest 19 kwi 2024, o 20:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 7 lis 2017, o 01:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 547
Pomógł: 0

Przepisuje i analizuje filmik " dawcy czasu " p. Mirka i wywala mi warninga w stworzonym pliku mk_pcf8583.c , który znajduje się w folderze MK_PCF8583
w kodzie pliku mk_pcf8583.h stworzona jest taka struktura :

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


natomiast w bliżniaczym pliku mk_pcf8583.c nie widać tych struktur i wywala warninga w linijce TDATETIME datetime;
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


nie widać także w tej funkcji ( mk_pcf8583.c ) definicji preprocesora :

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


dlaczego tak się dzieje że plik c nie zauważa pliku h ??

po kompilacji wyglada to tak:
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: 7 lis 2017, o 08:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 369
Lokalizacja: Gliwice
Pomógł: 34

Jak na moje oko kompilator ani linker nie wywalają żadnych warningów, źródła kompilują się poprawnie.
Zrób pełnego builda z cleanem.

Nie widzę za to popranej deklaracji struktury w pliku nagłówkowym, jest tylko definicja typu strukturalnego.
Należałoby zatem dopisać:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Być może masz to w kodzie, ale jest tylko wycinek pliku nagłówkowego.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 08:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 547
Pomógł: 0

Zrobiłem tak jak napisałeś i oto dziwne zjawisko nastąpiło wpisałem w pliku nagłówkowym :

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


Wywaliło mi w tym miejscu warninga , ale po chwili gdy usunąłem ten zapis warning zniknął i wszystko zadziałało , nierozumiem tylko dlaczego tak się stało ,
w sumie build i clean zrobiłem po tym, proszę mi wyjaśnić gdzie robiłem błąd bo całą noc siedziałem nic nie wymyśliłem , rano wstałem napisałem jak kolega
mi podpowiedział i wszystko ruszyło , chociaż zapis jest taki sam?

Dlaczego programy bliżniacze się nie widziały??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 09:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 369
Lokalizacja: Gliwice
Pomógł: 34

Niestety z Twojego opisu niewiele wiadomo.
Nie wiadomo co za warning, również co to są "programy bliźniacze" :)

Jeśli korzystasz ze struktury w innych modułach, to deklaracja "extern TDATETIME datetime;" musi być.
Koniecznie przeczytaj ten wątek:
topic19291.html

ale najlepiej parę razy, ze zrozumieniem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 09:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 547
Pomógł: 0

Zle się faktycznie wyraziłem miałem na myśli pliki bliżniacze mk_pcf8583.h i mk_pcf8583.c, które się nie widziały.
A co do tego "extern TDATETIME datetime;" to jest to ciekawe że jak to wpisałem wyskoczył warning - skasowałem i po chwili kompilacja nie wyrzuciła warniga?????



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 10:14 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Nie to nie jest ciekawe.
Warning wyskakuje tylko podczas pierwszej kompilacji.
Jak zrobisz clean pewnie znowu Ci wyskoczy...

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 12:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 547
Pomógł: 0

No ale teraz jest obojętne ile razy zrobię klinowanie
czy bindowanie za każdym razem jest ok i nawet
słówka extern nie wpisuje



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 13:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 369
Lokalizacja: Gliwice
Pomógł: 34

W wątku, który podawałem był poruszany temat, że z brakiem słówka "extern" kompilator sobie radzi.
Niemniej jednak deklarację w pliku nagłówkowym trzeba podać, jeśli chcemy udostępnić zmienną do innych modułów.
Wg mnie po prostu "toolchain wie" co ma zrobić z plikiem naglówkowym w tym wypadku. Tak czy inaczej nalezy to extern tam wpisywać, zgodnie z tzw. "Sztuką"


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 18:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 547
Pomógł: 0

zastanawia mnie czy trzeba go zawsze stosować w plikach nagłówkowych , a czy może być problem jak by się go za często stosowało i dlaczego nie stosuje się go w poradnikach wideo?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 20:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 369
Lokalizacja: Gliwice
Pomógł: 34

Trzeba, nie trzeba to zwykle nieproste pytanie i trochę filozoficzne. Zwykle świat się nie wali, gdy uznajemy, ze nie trzeba, ale możemy dostać "rykoszetem" :)
Ja wpisuję zawsze. Potem pozwala mi to łatwiej analizować własny kod. Takie podejście porządkuje, ułatwia, ale zwykle w szerszej perspektywie.
Nie mam potem problemu czy deklaracja czy definicja. Dopiero teraz, po dłuższym programowaniu, doceniam takie szczególiki, myczki jak programowanie ze "sztuką"
Czemu nie ma tego w poradnikach? Ważne, że jest w książkach. Poradniki piszą różni ludzie, ci co zjedli zęby na programowaniu i ci którym się wydaje, że zjedli :)
Piszą też Ci, co zauważyli, że brak extern nic nie zmienia i zakładają, że to jest po prostu dobrze i w większości jest, ale diabeł często tkwi w szczegółach.
Dobra dość tej filozofii :) programowanie to sztuka bycia dokładnym, to sztuka precyzji, półśrodki (jak nie wpisanie tego extern) zwykle potem się mszczą.
Ave!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lis 2017, o 22:20 
Offline
Moderator
Avatar użytkownika

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

Zealota napisał(a):
Trzeba, nie trzeba to zwykle nieproste pytanie i trochę filozoficzne.

To nie jest filozoficzne, takie są założenia języka C ;) ot po prostu

to, że czasem ktoś sobie np wymyśli - że w języku C inkluduje się np inne pliki źródłowe *.c i to czasem działa ... to znaczy, że tak się robi ? No cóż wiele osób, które nie zapoznają się z zasadami języka C - robią tak, i piszą później - że skoro im tak działa to znaczy, że można i tak się robi ;) Tyle że pokazuje to tylko jedno - nie programowali jeszcze w życiu za wiele i za dużo w C, nie spotkali się z problemami inkludowania plików źródłowych do źródłowych ...

co gorsza! ;) nie wiedzą - że bez takiego inkludowania można WSZYSTKO w C ;) i co ważniejsze - NIGDY nie napotka się idąc zgodnie z zasadą, problemów

------------------------------------

mnie już np ręce opadają - bo ostatnio przetoczyło się kilka dziwnych dyskusji na forum i to właśnie o specyfikatorze "extern" na forum i o tym, że niektórzy kompletnie nie rozumieją czym różni się DEKLARACJA od DEFINICJI zmiennej ;) więc w tym wątku już nawet nie zabieram głosu

powiem tylko, że ... no aż ciarki mnie po plecach przechodzą na takie zdanie:

AKSELINEK napisał(a):
i dlaczego nie stosuje się go w poradnikach wideo?


w jakich poradnikach wideo ? bo chyba nie w moich do jasnej ciasnej ;)

_________________
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: 8 lis 2017, o 09:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 547
Pomógł: 0

Ja miałem na myśli inne poradniki nie p. Mirka, na poradnikach Pana Mirka to ja się wzoruje , przepraszam jeśli zostałem żle zrozumiany i nie chciałem nikogo urazić.

Ja tylko do końca nie rozumiem kiedy mogę używać a kiedy nie nadużywać słówka EXTERN i to wszystko dlatego stąd moje pytanie.

Program nie chciał mi się poprawnie kompilować , potem nic wiele nie zmieniając w programie nagle ładnie zadziałał i stąd moje dylematy człowieka , który tylko che się się czegoś
nauczyć i poznać dokładnie tajniki tego magicznego słówka.
Deklaracja była zapisana w pliku mk_pcf8583.h

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


a definicja w bliżniaczym pliku mk_pcf8583.c

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

Jeżeli żle zrozumiałem to proszę mnie poprawić, gdzie nie rozumiem co to deklaracja -a definicja zagadnienie dotyczyło jednak tego dlaczego kompilator nie widział zapisu " TDATETIME datetime " a potem go nagle zobaczył??

A poradniki są bardzo dobre i bardzo fachowe, jakbym w młodych latach kiedy nie było jeszcze internetu miał taki dostęp do tak fachowej wiedzy to może byłbym kimś innym.
Przepraszam że się rozgadałem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lis 2017, o 18:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 369
Lokalizacja: Gliwice
Pomógł: 34

AKSELINEK napisał(a):
Deklaracja była zapisana w pliku mk_pcf8583.h

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

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


No i tu jest pies pogrzebany. W tym fragmencie nigdzie nie dałeś deklaracji. UWAGA! Zdefiniowałeś tylko typ strukturalny.

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


2. Plik źródłowy

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


Dla 1), poprzez deklarację, informujesz inne moduły, że "gdzieś jest zrobiona definicja zmiennej". W tym przypadku akurat w pliku źródłowym 2)

AKSELINEK napisał(a):
Jeżeli żle zrozumiałem to proszę mnie poprawić, gdzie nie rozumiem co to deklaracja -a definicja zagadnienie dotyczyło jednak tego dlaczego kompilator nie widział zapisu " TDATETIME datetime " a potem go nagle zobaczył??

Cechą charakterystyczną, praktycznie wszystkich początkujących, również tyczy się to mnie :), jest to, że bardzo często im się "wydaje". Nie znając dziedziny, z którą się spotykają, zbyt dogłębnie, nie widzą szczegółów, patrzą przez jakiś pryzmat swoich wyobrażeń, a nie faktów - tak to oceniam :)
Dochodzą później do takich wniosków: "kompilator nie widział, a teraz widzi".
Kompilator widzi to co mu poda programista, a że początkujący zwykle nie wie co ma podać, to później dochodzi do zrzucania winy na wszystko, tylko nie na siebie. I tu nie chodzi o wiek początkującego, w żadnym wypadku, tylko o doświadczenie w danej dziedzinie.
Mnie się często zdarzają sytuację, że piszę coś w plikach źródłowych, mam jakieś dziwne akcje i już chce zwalać na rąbek u spódnicy, a na koniec okazuje się, że nie pisałem tam gdzie trzeba - nie widziałem całości i wyciągałem zły wniosek.
Teraz ja się rozgadałem :) W przeciwieństwie do Mirka, ja wszędzie widzę filozofię :)

Podsumowując. W podanym wyżej kodzie nie miałeś deklaracji. Prawdopodobnie pomyliłeś deklarację z definicją typów.
Definicja typu to nie to samo co definicja zmiennej.
Przynajmniej tak to wynika ze wpisu, choć mam wrażenie, że coś Ci ucięło zdanie, po nawiasie "{".



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO