<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=13756&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-04T23:16:21+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13756&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-12-04T23:16:21+01:00</updated>
<published>2015-12-04T23:16:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147088#p147088</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147088#p147088"/>
<title type="html"><![CDATA[Re: Nowy typ strukturalny - gdzie definiować i deklarować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147088#p147088"><![CDATA[
<div class="quotetitle">mkot123 napisał(a):</div><div class="quotecontent"><br />Nadal pojawia się ten sam błąd.<br /></div><br />Posłuchaj, zwracaj uwagę gdzie pojawia się ten błąd, czyli w jakim pliku. A ty tylko mówisz nam że on znowu występuje .... <br /><br />Postaraj się zrozumieć to co poradził ci kolega korpikn ... a poradził dobrze ....<br /><br />toż skoro masz w pliku func.h DEKLARACJE funkcji w których wykorzystujesz w argumentach typ PIDTYPE to jak myślisz? skąd kompilator ma wiedzieć na etapie pierwszego sprawdzania pliku przed kompilacją co to za nazwa ? skoro w tym pliku jej nie ma zdefiniowanej ani nie ma żadnego inkluda z którego wynikałaby ta definicja ....<br /><br />Więc skoro dodałeś to co podpowiedział kolega , a błąd nadal występuje to pewnie też w komunikatach w Console masz także nazwę pliku w którym to się dzieje a nawet sam Eclipse pewnie to sygnalizuje znacznikami .... <br /><br />pewnie tam też nie ma tego inkluda<br /><br />Tak w ogóle to zastanów się .... czy ten typ jest charakterystyczny i powiązany tylko z plikami func.* ? bo jeśli tak to umieszczanie zarówno typu PIDTYPE jak i zmiennej tego typu w jakimś innym trzecim rodzaju plików var.* jest na pewno właśnie przekombinowaniem<br /><br />No chyba, że będzie on wykorzystywany w wielu innych plikach projektu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 gru 2015, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mkot123]]></name></author>
<updated>2015-12-04T22:35:25+01:00</updated>
<published>2015-12-04T22:35:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147081#p147081</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147081#p147081"/>
<title type="html"><![CDATA[Re: Nowy typ strukturalny - gdzie definiować i deklarować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147081#p147081"><![CDATA[
Panie Mirku, ale skąd to oburzenie.<br />Przecież napisałem, że uwielbiam taki styl i nie było w tym krzty sarkazmu.<br />Uważam, że Pana podejście jest jak najbardziej właściwie i doceniam trud oraz czas włożony w edukowanie rzeszy młodych amatorów programistów (ja jestem jednym z nich, z naciskiem na &quot;amator&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" />)<br /><br />Nie miałem zamiaru Pana urazić, wręcz przeciwnie, docenić nie tylko wiedzę, ale i (moim zdaniem) oryginalny styl wypowiedzi, prezentowany również w filmach na kanale YT. Za to wielki PLUS!<br /><br />Wracając jednak do tematu. Zrobiłem jak polecił korpikn, ale to niestety nie rozwiązało problemu. Nadal pojawia się ten sam błąd.<br />Swoją drogą, czy moja propozycja z wyrzuceniem wszystkich zmiennych do osobnego pliku to dobre rozwiązanie? Czy nie jest zbyt przekombinowane?<br />Gdzie Waszym zdaniem powinienem definiować zmienne globalne?<br />Mój pomysł wynika wprost z poradników Pana Mirka, który zawsze przywiązuje dużą uwagę do przejrzystości i porządku w kodzie. Nie wiem jednak, czy przypadkiem nie przekombinowałem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6704">mkot123</a> — 4 gru 2015, o 22:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-12-04T22:05:26+01:00</updated>
<published>2015-12-04T22:05:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147072#p147072</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147072#p147072"/>
<title type="html"><![CDATA[Re: Nowy typ strukturalny - gdzie definiować i deklarować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147072#p147072"><![CDATA[
<div class="quotetitle">mkot123 napisał(a):</div><div class="quotecontent"><br />Swoją drogą Panie Mirku uwielbiam styl Pana wypowiedzi - troszkę żartobliwy, troszkę uszczypliwy. Super.<br /></div><br />NIGDY w takich sytuacjach nie stosuję uszczypliwości, staram się wyjaśnić jak mogę i jak umiem..... Uszczypliwości przypisują mi zwykle te osoby, które ? ... no właśnie np źle zadali pytanie, a na końcu się oburzają, że ja nie rozpoznałem stopnia zaawansowania i że zwracam się jak do jakiegoś początkującego .... Tymczasem ponieważ ja sam jestem początkujący w C - to mam taki sposób, że praktycznie z każdym rozmawiam jak z początkującym - wtedy jest łatwiej ... no ale .... skoro ta cała moja wypowiedź i kurna kupa podpowiedzi to były uszczypliwości (masakra) <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to się wyłączam .... powodzenia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 gru 2015, o 22:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[korpikn]]></name></author>
<updated>2015-12-04T21:20:28+01:00</updated>
<published>2015-12-04T21:20:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147060#p147060</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147060#p147060"/>
<title type="html"><![CDATA[Re: Nowy typ strukturalny - gdzie definiować i deklarować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147060#p147060"><![CDATA[
W func.c musi być #include &quot;func.h&quot;, a w func.h #include &quot;var.h&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11146">korpikn</a> — 4 gru 2015, o 21:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mkot123]]></name></author>
<updated>2015-12-04T19:15:28+01:00</updated>
<published>2015-12-04T19:15:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147043#p147043</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147043#p147043"/>
<title type="html"><![CDATA[Re: Nowy typ strukturalny - gdzie definiować i deklarować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=147043#p147043"><![CDATA[
Bardzo dziękuję za wyczerpującą pomoc, ale chyba nie do końca dokładnie wyjaśniłem moje intencje.<br />Swoją drogą Panie Mirku uwielbiam styl Pana wypowiedzi - troszkę żartobliwy, troszkę uszczypliwy. Super.<br /><br />Do rzeczy.<br />Dobrze rozumiem różnicę pomiędzy deklaracją (&quot;mam zamiar użyć, gdzieś, kiedyś&quot;), a definicją (&quot;tak wygląda moja funkcja/zmienna).<br />Rozumienie tej różnicy w moim przypadku nie do końca jednak pozwala na prawidłowe zastosowanie w praktyce mojej wizji.<br /><br />Chciałbym podzielić program (i robić tak w przyszłych projektach) na główną część programu (main.c), na biblioteki (func.c, func.h oraz wiele innych jeśli zaistnieje taka potrzeba) oraz osobny plik/pliki ze zmiennymi globalnymi i ewentualnymi typami (np. strukturalnymi), które mam zamiar używać.<br />Ważne natomiast jest, aby te nowe typu były również widoczne dla funkcji w pliku func.c.<br /><br />Gdyby zaistniała potrzeba użycia zmiennej globalnej w jakieś funkcji (tak nie robię, ale to tylko przykład), to po prostu DEFINIUJĘ zmienną w pliku var.c (nie .h jak zasugerowano), a następnie w pliku func.h umieszczam jej DEKLARACJĘ ze słowem extern (w końcu definicja jest w innym pliku).<br /><br />To samo chciałbym zrobić ze strukturą, której typ sam stworzyłem.<br />Czy dobrze rozumiem, że powinno to wyglądać tak:<br /><br />main.c - tutaj mam dostęp do wszystkich typów, zmiennych oraz funkcji<br />func.h - deklaracje funkcji<br />func.c - definicje funkcji<br />var.h - deklaracje typów, deklaracje zmiennych (ze słowem extern?)<br />var.c - definicje zmiennych (np. int liczba, albo PIDTYP jakas_struktura)<br /><br /><br />Dopisek:<br />Zrobiłem tak:<br /><br />var.h<br />[syntax=c]typedef struct {<br />// tutaj zawartość<br />}PIDTYPE;<br /><br />extern PIDTYPE M2_PID;[/syntax]<br /><br />var.c<br />[syntax=c]PIDTYPE M2_PID;[/syntax]<br /><br />func.h<br />[syntax=c]void PID_control(PIDTYPE * str);<br />void PID_init(PIDTYPE * str);[/syntax]<br /><br />func.c<br />[syntax=c]void PID_control(PIDTYPE * str){<br />// tutaj ciało funkcji<br />}<br /><br />void PID_init(PIDTYPE * str){<br />// tutaj ciało funkcji<br />}[/syntax]<br /><br />Kompilator zgłosił błąd:<br />var.c:49:1: error: unknown type name 'PIDTYPE'<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6704">mkot123</a> — 4 gru 2015, o 19:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-12-03T20:54:48+01:00</updated>
<published>2015-12-03T20:54:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146986#p146986</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146986#p146986"/>
<title type="html"><![CDATA[Re: Nowy typ strukturalny - gdzie definiować i deklarować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146986#p146986"><![CDATA[
wyjaśniałem to już autorowi na blogu ale powtórzę tutaj bo będzie przejrzyściej:<br /><br />panie kolego w języku C definicje zmiennych umieszcza się w plikach *.c a nie to co ty tu planujesz w pliku *. chcesz utworzyć definicję zmiennej tego typu strukturalnego.<br /><br />reasumując:<br /><br />[syntax=c]typedef struct {<br /><br />} PIDTYPE;[/syntax]<br /><br />TAKĄ definicję TYPU (uważaj - definicję TYPU a nie definicję zmiennej!) umieszczasz w swoim pliku *.h !!!<br /><br />taką DEFINICJĘ zmiennej:<br /><br />[syntax=c]PIDTYPE nowa_struktura;[/syntax]<br /><br />umieszczasz w swoim pliku *.c<br /><br />i teraz uważaj pan jeszcze raz!!! .... <br /><br />zaś DEKLARACJĘ zmiennej - taką:<br /><br />[syntax=c]extern PIDTYPE nowa_struktura;[/syntax]<br /><br />umieszczasz w swoim pliku func.h<br /><br />jasne ? (czyli zarówno <strong><span style="color: #0080FF">DEFINICJA TYPU</span></strong> jak i <strong><span style="color: #0080FF">DEKLARACJA </span></strong>zmiennej siedzą w <strong><span style="color: #0080FF">*.h</span></strong> a tylko <strong><span style="color: #BF00FF">DEFINICJA </span></strong>zmiennej w <strong><span style="color: #BF00FF">*.c</span></strong>) i QNIEC<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br /><div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br />To wygląda bardzo podejrzanie.<br /></div><br />Nie tylko podejrzane ale wręcz kompletnie niezgodne z językiem C. Zmienne (ściślej mówiąc DEFINICJE zmiennych) muszą być w plikach *.c natomiast ich DEKLARACJE w plikach *.h<br /><br />coś czuję, przez skórę, że jak to bywa - kolega autor ma problem ze zrozumieniem czym różni się DEFINICJA zmiennej/funkcji od DEKLARACJI zmiennej/funkcji ... a do tego może troszkę miesza mu się podział plików z językiem C++ no i kłopot gotowy<br /><br />dlatego polecam DOKŁADNIE poczytać Bluebooka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo po nim zwykle każdy zaczyna rozumieć tę fundamentalną różnicę, która pozwala nagle rozumieć kupę rzeczy w języku C <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 gru 2015, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2015-12-03T20:45:35+01:00</updated>
<published>2015-12-03T20:45:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146983#p146983</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146983#p146983"/>
<title type="html"><![CDATA[Re: Nowy typ strukturalny - gdzie definiować i deklarować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146983#p146983"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />var.h - wszelkie zmienne<br /></div>To wygląda bardzo podejrzanie.<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />[syntax=c]typedef struct PIDTYPE{<br />};[/syntax]<br /></div>jest definicją i powinien znaleźć się pliku .h w tym do którego merytorycznie pasuje najlepiej. Czyli pewnie func.h.<br />[syntax=c]PIDTYPE nowa_struktura;[/syntax]jest deklaracją zmiennej i musi być w pliku .c. Pewnie w main.c, bo w func.c masz ją przekazaną do funkcji jako argument.<br /><br />-- <br />Pozdrawiam,<br />Robert<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />Typ PIDTYPE będziesz miał dostępny w main.c i func.c po zaincludowaniu func.h.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 3 gru 2015, o 20:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mkot123]]></name></author>
<updated>2015-12-03T19:38:19+01:00</updated>
<published>2015-12-03T19:38:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146967#p146967</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146967#p146967"/>
<title type="html"><![CDATA[Nowy typ strukturalny - gdzie definiować i deklarować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13756&amp;p=146967#p146967"><![CDATA[
Mam następujące pytanie. Tworzę program, którego projekt chciałbym podzielić na następujące pliki - main.c - główny plik programu, func.c, func.h - definicje i deklaracje funkcji, macro.h - wszelkie makra, var.h - wszelkie zmienne. Teraz w func.c chciałbym napisać funkcję, do której chcę przekazać wskaźnik na strukturę, o tak:<br />void PID_control(PIDTYPE * str)<br />W którym pliku i w jaki sposób powinienem zdefiniować nowy typ PIDTYPE? Czy powinno to wyglądać, tak?<br />typedef struct PIDTYPE{<br />};<br />PID TYPE nowa_struktura;<br /><br />Chciałbym umieścić definicję i deklarację w pliku var.h, ale tak żebym mógł stworzyć funkcję wykorzystująca ten typ w pliku func.c. Czy to w ogóle jest możliwe i poprawne podejście?<br /><br />Mam nadzieję, że dobrze wyjaśniłem mój problem. Generalnie chodzi mi o zachowanie maksymalnej przejrzystości i porządku w programie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6704">mkot123</a> — 3 gru 2015, o 19:38</p><hr />
]]></content>
</entry>
</feed>