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



Teraz jest 26 mar 2026, o 04:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 3 gru 2016, o 23:16 
Offline
Użytkownik

Dołączył(a): 07 lut 2015
Posty: 157
Pomógł: 2

Tak nie do końca rozumiem.
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.


z kolei w plik.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.


Pytanie: dlaczego muszę powtarzać definicję (deklarację?) zmiennej mojTypek?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2016, o 23:36 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Z pliku main.c możesz to wykasować. Tylko zainkluduj plik.h.

extern enum mojTypek xyz; powinno być w plik.h , a nie plik.c


A mojTypek to zmienna, a nie typ. Trzeba uzyć typedef do utworzenia typu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 gru 2016, o 23:59 
Offline
Użytkownik

Dołączył(a): 07 lut 2015
Posty: 157
Pomógł: 2

Rafal555, tu się mylisz, albo się nie rozumiemy: mojTypek, to TYP wyliczeniowy, ksywa enum.

Też bym chciał trzymać go w pliku.h, aby korzystały z niego plik1.c i np. plik2.c, jak im bym dołączył plik.h.

Problem jednak jest taki, że jakoś to mi nie działa.
Aczkolwiek zaraz sprawdzę jeszcze raz, zgodnie z twoją sugestią.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 00:21 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

enumek.h

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


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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 00:41 
Offline
Użytkownik

Dołączył(a): 07 lut 2015
Posty: 157
Pomógł: 2

Rafal555, uzupelnij plik main.c i inne, bo w pliku1.c powiedzmy mam takie błedy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 1 minucie ]

P.S. Nie ma na liście "zywiec", które obecnie testuję.

------------------------ [ Dodano po: 15 minutach ]

Dodam tak, w chwili obecnej mam tak:
w 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.

W plik1.c:
enum mojTyp {_off, _wait, _on};
volatile enum alarmo alarm;
W plik.h:
nic
I to o dziwo kompiluje się bez błędów.
Ale dlaczego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 00:58 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Extern trzeba wywalić. Można wtedy zmienne typu browarki zadeklarować i w plik.c i main.c.

ps. wywala błąd "brak na stanie" jak chciałem dodać to co pisałeś.

Całe to
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wykasuj, a deklaracje w docelowych plikach .c można robić.



Ostatnio edytowano 4 gru 2016, o 01:05 przez Rafał555, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 01:01 
Offline
Użytkownik

Dołączył(a): 07 lut 2015
Posty: 157
Pomógł: 2

Sorki, pomieszało się, ma być tak:
W pliku plik1.c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 13 minutach ]

Rafal555, nie możemy się dogadać.

1. Piszę że coś zrobiłem, nie wywala błędów, ale tego nie rozumiem.
2. Przedstawiasz koncepcje (z tym, że etapami i w końcu się pogubiłem), jakby zrozumiałe, ale to nie chodzi-są błędy przy kompilacji.

------------------------ [ Dodano po: 29 minutach ]

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

jest deklaracją, czy definicją, czy deklaracją i jednocześnie definicją?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 10:27 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Napisałeś na początku, że w dwóch plikach wpisujesz to samo. Wystarczy w jednym.

Ja się nauczyłem stosować typedef, żeby nie powtarzać tego enum przy tworzeniu zmiennej.
zamiast
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Czy to deklaracja, czy definicja? W przypadku enum to na chłopski rozum ciężko mi określić, ale pierwszą linijkę
z obu przykładów pakujesz do pliku .h więc można określić to deklaracją typu wyliczeniowego.
Natomiast druga linijka to pewnie definicja zmiennej typu wyliczeniowego, jak tworzysz i wstępnie inicjalizujesz w pliku .c.
Teraz się tak bawię i można ją również zadeklarować w pliku .h, ale bez extern i bez inicjalizacji.
Chyba nic już więcej mądrego nie napiszę :) . A w BB tak słabo opisane? Nie mam teraz pod ręką niestety.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 gru 2016, o 11:59 
Offline
Użytkownik

Dołączył(a): 07 lut 2015
Posty: 157
Pomógł: 2

Rafal555,
dzisiaj, na spokojnie wziąłem się do zmian i przeróbek ( z typu enum korzystam i w argumentach funkcji i jeszcze w kilku miejscach),
aby wykorzystać instrukcję typdef.

Przypomniałeś mi o typedef, czyli o nadawaniu nowej nazwy do istniejącego typu,
typedef nie stosowałem do tej pory,
ale faktycznie w tym przypadku dużo upraszcza. Nie muszę ciągle pisać enum, enum ...

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


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


Teraz mi się to zgadza, nie mam powtórzeń o czym pisałem na początku tego wątku..

------------------------ [ Dodano po: 45 minutach ]

PS. BB mam pod ręką, zaraz jeszcze raz zajrzę.



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 5 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