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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 21 maja 2025, o 16:37


    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: 584
    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 ] [ Zaznacz wszystko ]
    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: 368
    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: 584
    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: 368
    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: 584
    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: 584
    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: 368
    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: 584
    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: 368
    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: 27402
    Lokalizacja: Szczecin
    Pomógł: 1043

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