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



Teraz jest 27 kwi 2026, o 06:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 31 paź 2013, o 19:44 
Offline
Nowy

Dołączył(a): 06 paź 2013
Posty: 13
Pomógł: 0

Witajcie ;)

tworzę program i własną bibliotekę. mam pliki main.c lib.h i lib.c chcę zrobić by zmienna zadeklarowana w lib.h była widoczna w main.c i wyczytałem z niebieskiej książki Pana Mirka (świetna książka, każdą stronę czytam z podziwem (; ) że należy poprzedzić deklarację słówkiem extern. problem w tym że to nie działa ;/ zmienne te nie są widoczne nawet w lib.c i żeby działało muszę deklarować w lib.c ale wtedy to już wogóle nie będą widoczne w main.c poniżej kawałki kodu plikó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.


lib.h

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


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



nie jest to dokładny kod programu bo nie chcę żeby tu było za gęsto i za dużo kodu ale reszta jest nieistotna, problemem moim jesty to, że w tym momencie nie widać w mainie ani w lib.c zmiennych w lib.h ;/

chciałbym prosić was o pomoc, ponieważ nie wiem czy jest to błąd w kodzie, czy to wina plugina może ( programuję w eclipse) a nie chcę błądzić po omacku ;) pozdrawiam ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2013, o 20:09 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Ostatnio edytowano 6 lis 2015, o 13:53 przez xor, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 paź 2013, o 22:37 
Offline
Moderator
Avatar użytkownika

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

egemini napisał(a):
problem w tym że to nie działa

Czy sądzisz że opisywałbym TAK PODSTAWOWY mechanizm w C ... który miałby nie działać ? ...


xor napisał(a):
To co jest w lib.h to *deklaracja* zmiennych, nigdzie nie ma *definicji*. Nic więc dziwnego że kompilator krzyczy. Żeby to zadziałało trzeba zmienne zadeklarować w lib.c (i nie inkludować lib.h w lib.c bo prawdopodobnie kompilator ogłosi błąd, zresztą nawet nie ma po co)


prawie dobrze tzn początek BARDZO DOBRY:

xor napisał(a):
To co jest w lib.h to *deklaracja* zmiennych, nigdzie nie ma *definicji*. Nic więc dziwnego że kompilator krzyczy.


ale dalej to już:
xor napisał(a):
Żeby to zadziałało trzeba zmienne zadeklarować w lib.c


Na pewno nie deklarować a ZDEFINIOWAĆ - ale myślę że kolega się po prostu przejęzyczył tutaj. Bo oczywiście że w lib.c MUSI być najpierw ich DEFINICJA żeby w lib.h mogła działać DEKLARACJA z extern

pokazuję to w bluebooku wyraźnie ale pewnie koledze egemini coś tam umknęło i myślę że teraz się wyjaśni.

krócej mówiąc

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



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


dlatego tak WAŁKUJĘ w książce żeby czytelnik zrozumiał czym różni się definicja od deklaracji


Autor postu otrzymał pochwałę

_________________
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: 1 lis 2013, o 00:26 
Offline
Nowy

Dołączył(a): 06 paź 2013
Posty: 13
Pomógł: 0

I rozumiem, że jeśli chcę żeby zmienna była również widoczna w main.c muszę ją w mainie zaDEKLAROWAĆ z extern tak? wtaki sposób mi działa, dziękuję bardzo za pomoc :)

mirekk36 napisał(a):
egemini napisał(a):
problem w tym że to nie działa

Czy sądzisz że opisywałbym TAK PODSTAWOWY mechanizm w C ... który miałby nie działać ? ...

w żadnym wypadku nie chciałem, żeby to tak zabrzmiało, miałem na myśli to, że mi coś nie działa i przyczyną tego jest że coś źle rozumiem, ale jak przeczytałem to drugi raz to rzeczywiście tak brzmi za co serdecznie przepraszam.

dziękuję jeszcze raz za pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2013, o 00:58 
Offline
Moderator
Avatar użytkownika

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

egemini napisał(a):
I rozumiem, że jeśli chcę żeby zmienna była również widoczna w main.c muszę ją w mainie zaDEKLAROWAĆ z extern tak? wtaki sposób mi działa


poczekaj - źle rozumiesz ...

ABSOLUTNIE w man.c nie robisz znowu extern

jedyne co robisz to w pliku main.c inkludujesz przecież swój

lib.h

który już ma tego externa - więc po co jeszcze raz przepisywać to ręcznie w main.c ? ;)

rozumiesz teraz po co są pliki nagłówkowe *.h ?

_________________
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: 1 lis 2013, o 02:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 24 cze 2012
Posty: 414
Lokalizacja: Oborniki
Pomógł: 5

Jak robimy include, to tak jak byśmy wklejali bezpośrednio do tekstu zawartość includowanego tekstu :) więc wszystko co znajduje się w *.h (zainkludowanym) - znajduje się również w pliku głównym (oczywiście po zainkludowaniu tego wspominanego *.h ) :)

_________________
Pozdrawiam:
Mikołaj



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lis 2013, o 10:00 
Offline
Nowy

Dołączył(a): 06 paź 2013
Posty: 13
Pomógł: 0

mikandrzej napisał(a):
Jak robimy include, to tak jak byśmy wklejali bezpośrednio do tekstu zawartość includowanego tekstu :) więc wszystko co znajduje się w *.h (zainkludowanym) - znajduje się również w pliku głównym (oczywiście po zainkludowaniu tego wspominanego *.h ) :)


to jest dla mnie jasne od kilku lat, wszystko przez to, że wykonuję projekt pod presją czasu, pracuję nad pracą inżynierską i za bardzo się przejmuje ze mam mało czasu i tak wychodzą takie babole przy tak prostych rzeczach ;p

mirekk36, externa miałem tylko w main.c , ale rzeczywiście zrobiłem to bez sensu, przerzuciłem do pliku nagłówkowego i jest ok ;)



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

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