ATNEL tech-forum https://forum.atnel.pl/ |
|
Jak odwołać się do struktury utworzonej w innym pliku? https://forum.atnel.pl/topic20834.html |
Strona 1 z 1 |
Autor: | Zealota [ 5 cze 2018, o 18:31 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
A skąd plik time.h może wiedzieć coś o nowym typie? język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Ewidentnie brakuje tutaj wpisu język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. To, że dałeś w pliku time.c to jest za mało, a właściwie za dużo, bo wystarczy zainkludować w time.h, a potem time.h w time.c. Do pliku time.h też należy dorzucić: |
Autor: | janusz17 [ 5 cze 2018, o 19:05 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
Bardzo dziękuję za podpowiedź, jakoś nie dotarło do mnie , że w plikach.h też trzeba inkludować inne pliki.h. Dodałem język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. i wszystko jest ok. A czy mógłbyś wyjaśnić po co jeszcze dodawać bibliotekę stdint.h? |
Autor: | Zealota [ 5 cze 2018, o 19:36 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
janusz17 napisał(a): Bardzo dziękuję za podpowiedź, jakoś nie dotarło do mnie , że w plikach.h też trzeba inkludować inne pliki.h. Dodałem język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. i wszystko jest ok. A czy mógłbyś wyjaśnić po co jeszcze dodawać bibliotekę stdint.h? Bardzo prosta odpowiedź: bo u mnie nie działało bez Brak wpisu skutkuje błędem z nieznanym typem uint8_t. Tak prawdopodobnie będzie w całkiem pustym projekcie, jak u mnie, Twój być może ma już więcej plików i definicja przychodzi z innymi plikami nagłówkowymi, lub masz jakieś inne opcje kompilacji, że nawet "tego nie widać". |
Autor: | xentis [ 5 cze 2018, o 20:36 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
janusz17 napisał(a): A czy mógłbyś wyjaśnić po co jeszcze dodawać bibliotekę stdint.h? Zealota napisał(a): Bardzo prosta odpowiedź: bo u mnie nie działało bez Brak wpisu skutkuje błędem z nieznanym typem uint8_t. Nie trzeba inkludować stdint.h. Problemy z brakiem definicji typu uint8_t jest zapewne spowodowany tym, że w eclipse przy tworzeniu projektu w kreatorze wybrałeś procka bądź zostawiłeś domyślny. Po prostu kreator nie do końca wszystko robi jak trzeba, a wystarczy wejść we właściwości projektu zmienić procka (jeśli był wybrany właściwy w kreatorze to trzeba wybrać inny i zatwierdzić, następnie wrócić i wybrać ponownie właściwy) i zatwierdzić. Dla tego Mirek w poradnikach sugerował by procka i taktowania nie wybierać w kreatorze, ale później ręcznie w ustawieniach projektu po zakończeniu działania kreatora - i tak trzeba tam zajrzeć by ustawić programator... Nie wiem w czym konkretnie tkwi problem ale z tego co Mirek gdzieś kiedyś mówił to kreator nie tworzy kilku parametrów w projekcie, a ustawienie procka i zatwierdzenie powoduje że brakujące rzeczy są uzupełniane. |
Autor: | mirekk36 [ 5 cze 2018, o 21:02 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
A ja z kolei nigdy bym nie tworzył definicji typu strukturalnego w jakimś pliku specyficznym - związanym np TYLKO z RTC ... jak u ciebie "pcf8583.h" dlaczego ? Ano dlatego, że definicję tegoż typu próbujesz wykorzystywać w innych plikach projektu, które są KOMPLETNIE jakby nie związane z tym plikem RTC ... więc jaki sens ? Absolutnie fajnym sposobem jest np utworzenie w korzeniu projektu pliku np: common.h i common.c i właśnie w common.h zdefiniowanie typu za pomocą typedef, zaś w pliku common.c utworzenie definicji tejże zmiennej a następnie INKLUDOWANIE tam gdzie trzeba czyli w plikach *.c pliku "common.h" oczywiście w logicznej kolejności np gdy tworzysz pliki sdcard.h i sdcard.c to w pliku sdcard.c inkludujesz: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. wtedy nawet jeśli typ będzie występował w "sdcard.h" to będzie normalnie zauważony przez kompilator |
Autor: | Marhef [ 6 cze 2018, o 07:30 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
mirekk36 napisał(a): co zaś się tyczy inkludowania pliku Dzieje się tak, ponieważ stdint.h jest dodawany w jednym z trzech pierwszych plików (obstawiam, że w io.h, ale nie mam jak sprawdzić)?#include <stdint.h> w plikach nagłówkowych - tzn konieczności tego inkluda albo nie - to proponuję sobie zrobić ciekawy eksperyment i udzielić sobie odpowiedzi, na pytanie dlaczego w takim wypadku początku main.c: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. nie trzeba inkludować pliku stdint.h w widocznych tutaj plikach nagłówkowych i kompilacja przechodzi poprawnie ? a dlaczego w takim przypadku początku main.c język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. kompilator zgłosi błędy, że w plikach nagłówkowych (o ile występuje typ np uint8_t) - to że jest on nieznany i uda się to rozwiązać przez właśnie zainkludowanie stdint.h ??? Natomiast w drugim przypadku najpierw dodawana jest zawartość plików pcf8583.h oraz sd.h, w których pojawia się typ uint8_t. A ponieważ dodawanie bibliotek powoduje "wklejenie" ich w miejscu wstawienia, więc deklaracja typuuint8_t jest później niż użycie. I kompilator zgłasza błąd Mam rację? |
Autor: | mirekk36 [ 6 cze 2018, o 09:08 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
dokładnie - a przykład ten pokazuje, że wystarczy zachowywać porządek inkludowania - czyli najpierw pliki systemowe a później własne w cudzysłowach i okaże się, że nie trzeba inkludować stdint.h |
Autor: | janusz17 [ 6 cze 2018, o 14:04 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
Bardzo dziękuję wszystkim za pomoc w rozwikłaniu mojego problemu. Muszę przyznać, że nie wiedziałem i nigdy się jak dotąd nie spotkałem z inkludowaniem innych plików , w pliku.h. Nawet sądziłem, że takie dołączanie plików jest błędne. Jednak teraz żeby jeszcze lepiej zrozumieć jak to jest z tym inkludowaniem, przerabiam ten mój przykład na różne warianty i "odkryłem" jeszcze dwie sytuacje dla mnie dziwne. 1. Jeśli w takim układzie folderów i plików jak miałem na początku, w pliku time.c napiszę sobie taką funkcję język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. a w pliku time.h, w jej deklaracji pominę argument język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. wszystko kompiluje się prawidłowo i to bez dołączania pliku pcf8583.h. Niestety nie można wtedy dodać do funkcji drugiego argumentu bo kompilator wyrzuca błąd. 2. Jeśli funkcję mam zapisaną dalej w pliku time.c , a jej deklarację zamiast umieścić w pliku time.h zapisze w pliku pcf8583.h, to o dziwo kompilator też nie zgłasza żadnych uwag. Tylko, że robi się lekki bałagan w kodzie. Natomiast mogę dodać jako argument zarówno strukturę jak i dodatkową zmienną. |
Autor: | mirekk36 [ 6 cze 2018, o 15:12 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
sorki ale co to za dziwny przypadek że tworzysz sobie gdzieś funkcję z jakimś tam argumentem (jej ciało) a do pliku H dajesz nagłówek funkcji ale bez argumentu - wybacz ale to bez sensu - i nie wiem nad czym tu się głowić, że to nie działa właściwie |
Autor: | janusz17 [ 6 cze 2018, o 16:11 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
Cytuj: sorki ale co to za dziwny przypadek że tworzysz sobie gdzieś funkcję z jakimś tam argumentem (jej ciało) a do pliku H dajesz nagłówek funkcji ale bez argumentu - wybacz ale to bez sensu - i nie wiem nad czym tu się głowić, że to nie działa właściwie ależ ja właśnie się dziwię, że to działa i kompilator nie zgłasza żadnych uwag |
Autor: | mirekk36 [ 6 cze 2018, o 16:44 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
Powiem krótko - chcesz się nauczyć jak należy robić żeby było prawidłowo czy rozpatrywać przypadki, dlaczego ... akurat zadziałało skoro nie powinno ... To tak jak z ludźmi - jedni jak dotkną palcami 230V to ich "kopnie" i tak powinno być prawda ? Ale sam dobrze, wiesz, że zdarzają się ludzie którzy mogą dotknąć 230V albo i więcej i ich "nie kopnie" ... i co z tego wynika ? Będziesz dzielił włos na czworo i szukał sposobu "jak oszukać przeznaczenie" hahahaha no wiadomo że jest jakieś wyjaśnienie ale to zależy od rezystancji naskórka itp itd w tym przypadku - programu, nie szkoda ci czasu szukać odpowiedzi na pytanie dlaczego zrobiłem ŹLE i mi zadziałało ? .... Oczywiście jak z naskórkiem tak tutaj trzeba zdać sobie sprawę z kroków kompilacji i na ten temat robiłem oddzielny poradnik. Na etapie kompilacji pliku C, nagłówek funkcji jest potrzebny tylko po to aby ZNAĆ NAZWĘ funkcji - a argumenty w pierwszym przebiegu nie są istotne - dlatego ci to działa |
Autor: | janusz17 [ 6 cze 2018, o 16:58 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
Cytuj: Powiem krótko - chcesz się nauczyć jak należy robić żeby było prawidłowo czy rozpatrywać przypadki, dlaczego ... akurat zadziałało skoro nie powinno ... Najlepiej było by wiedzieć i rozumieć jedno i drugie. Ale na tym etapie problem rozwiązany, wiec jeszcze raz dziękuję za wszelkie wskazówki. |
Autor: | mirekk36 [ 6 cze 2018, o 17:27 ] |
Tytuł: | Re: Jak odwołać się do struktury utworzonej w innym pliku? |
janusz17 napisał(a): Najlepiej było by wiedzieć i rozumieć jedno i drugie. Podałem przecież wyjaśnienie chodzi o nazwę funkcji na etapie czerpania informacji z pliku *.h dlatego działa - ale jak sam zauważyłeś robi się bajzel w kodzie |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |