|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.98 Kraj: Krško
|
Objavljeno: Pet Dec 26, 2014 1:30 am Naslov sporočila: C: .h datoteke, definicije globalnih spremenljivk itd.. |
|
|
Mi lahko kdo po kmečko razloži (ali pa navede kak vir), kako nastavljat header datoteke, kje definirati globalne spremenljivke, katere datoteke dati v include...
Dokler je vse v eni .c datoteki, so mi zadeve jasne. Pa lokalne spremenljivke tudi. Ne znam pravilno definirati globalnih spremenljivk, ki bi jih potem videle funkcije iz več .c datotek. In potem mi compiler jamra, da so večkratno definirane, čeprav jaz tega nikjer ne vidim...
Torej:
1. Kaj vse spada v .H datoteko in katere include je treba dodati?
2. Kako in predvsem kje vse definirati globalno spremenljivko, da bo vidna vsem funkcijam?
Hvala za pomoč!
_________________ Dobrga štromarja samo slab šnops strese! |
|
Nazaj na vrh |
|
|
RUros Član
Pridružen-a: Čet 09 Mar 2006 22:26 Prispevkov: 1030 Aktiv.: 4.66
|
Objavljeno: Pet Dec 26, 2014 10:21 am Naslov sporočila: |
|
|
Običajno delam tako, da imam za globalne stvari svoj .h file. V njem definiram vse potrebne globalne stvari. Ta file potem includam na začetku vsakega .c kjer pač rabim globalne definicije. Poleg njega v vsak .c file includam tudi tiste .h, ki se rabijo sam v tem delu.
Glede globalnih spremenljivk pa... Definiram tako kot običajno na začetku programa kot je v navadi. Spremenljivka je tako v osnovi že globalna, če pa želim da jo vidijo tudi druge funkcije v ostalih .c datotekah, uporabim "extern" pri vsaki od teh datotekah. Če se ti to večkrat ponavlja, lahko ta extern daš kar v globalni .h file.
|
|
Nazaj na vrh |
|
|
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1713 Aktiv.: 7.66 Kraj: Ig
|
|
Nazaj na vrh |
|
|
. Neznanec
Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Pet Dec 26, 2014 12:51 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika.
|
|
Nazaj na vrh |
|
|
tilz0R Član
Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 6.17 Kraj: Črnomelj
|
Objavljeno: Pet Dec 26, 2014 3:23 pm Naslov sporočila: Re: C: .h datoteke, definicije globalnih spremenljivk itd.. |
|
|
damo je napisal/a: |
Ne znam pravilno definirati globalnih spremenljivk, ki bi jih potem videle funkcije iz več .c datotek. |
Poglej si besedo "extern". Če v eni datoteki deklariraš globalno spremenljivko
in to isto spremenljivko potrebuješ v drugi .c datoteki, uporabi besedo "extern"
Koda: |
//lib2.c
extern int a;
void func(void) {
//delaj s spremenljivko kar potrebuješ
printf("%d", a);
}
|
_________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.98 Kraj: Krško
|
Objavljeno: Pet Dec 26, 2014 4:02 pm Naslov sporočila: |
|
|
torej, če prav razumem:
1. lokalne spremenljivke definiram v sami funkciji. V .h datoteko jih ne pišem.
2. spremenljivke, ki jih v eni .c datoteki definiram na vrhu, pred funkcijami, so vidne vsem funkcijam v tej .c datoteki. V .h datoteko jih ne pišem?
3. globalne spremenljivke napišem v main.h, nato pa deklaracijo ponovim v vsaki .c datoteki, kjer želim, da jih funkcije vidijo. Pred deklaracijo napišem "extern"".
katere spremenljivke pa pišem v razne .h datoteke?
_________________ Dobrga štromarja samo slab šnops strese! |
|
Nazaj na vrh |
|
|
tilz0R Član
Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 6.17 Kraj: Črnomelj
|
Objavljeno: Pet Dec 26, 2014 4:11 pm Naslov sporočila: |
|
|
1. Drži,
2. Drži,
3. Spremenljivke deklariraj vedno (moja praksa) v .c datoteki.
Če potem katera druga datoteka potrebuje to isto globalno spremenljivko, potem uporabu v tej drugi datoteki extern besedo, tako linkerju poveš da je spremenljivka nekje zunaj.
V .h imaš opise knjižnic, torej razne define stavke, strukture deklarirane, klice drugih knjižnic, definicije funkcij.
_________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.98 Kraj: Krško
|
Objavljeno: Pet Dec 26, 2014 5:16 pm Naslov sporočila: |
|
|
Uh, zgleda da je ratalo.
Vidim, da moram dati še definicijo strukture v vsako .c datoteko, pred "ekstern....."
Najlepša hvala za pomoč, upam, da sem osvojil Hvala tudi za zgornji link, sem si prebral, načeloma mi je blo jasno, samo delat ni hotelo. Zdaj sem pogruntal, da mora bit strukura definirana v vsakem .c fajlu... Saj je logično, .c datoteke ne vedo kaj se v drugi dogaja. Gremo tipkat naprej do novega problema
_________________ Dobrga štromarja samo slab šnops strese!
Nazadnje urejal/a damo Pet Dec 26, 2014 5:23 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
tilz0R Član
Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 6.17 Kraj: Črnomelj
|
Objavljeno: Pet Dec 26, 2014 5:17 pm Naslov sporočila: |
|
|
Prilepi še projekt, če ni neka skrivnost pa da vidimo kaj se dogaja.
_________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
|
vpeter Član
Pridružen-a: Pon 11 Jun 2012 16:05 Prispevkov: 337 Aktiv.: 2.32 Kraj: Maribor okolica
|
Objavljeno: Pet Dec 26, 2014 5:29 pm Naslov sporočila: |
|
|
Strukture definiraj v h datoteki.
|
|
Nazaj na vrh |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.98 Kraj: Krško
|
Objavljeno: Pet Dec 26, 2014 5:31 pm Naslov sporočila: |
|
|
Ni skrivnost, cel projekt je 34MB, zato sem dal le glavne datoteke.
Opis: |
|
Download |
Ime datoteke: |
dl_HPSD4000.c |
Velikost datoteke: |
4.29 KB |
Downloadano: |
8 krat |
Opis: |
|
Download |
Ime datoteke: |
dl_HPSD4000.h |
Velikost datoteke: |
332 Bytov |
Downloadano: |
7 krat |
Opis: |
|
Download |
Ime datoteke: |
main.c |
Velikost datoteke: |
1.71 KB |
Downloadano: |
8 krat |
Opis: |
|
Download |
Ime datoteke: |
main.h |
Velikost datoteke: |
713 Bytov |
Downloadano: |
5 krat |
_________________ Dobrga štromarja samo slab šnops strese! |
|
Nazaj na vrh |
|
|
tilz0R Član
Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 6.17 Kraj: Črnomelj
|
Objavljeno: Pet Dec 26, 2014 5:34 pm Naslov sporočila: |
|
|
Ne pozabi na Krokotov nasvet za .h datoteke
#ifndef __H_KNJ
#define __H_KNJ
//Tvoja koda headerja tukaj
#endif
Nevem točno kako mora to delovat, ampak premisli če se da, da so spremenljivke v knjižnici, v main-u imaš pa potem extern opcijo.
_________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.98 Kraj: Krško
|
Objavljeno: Pet Dec 26, 2014 5:49 pm Naslov sporočila: |
|
|
Ja točno, "guard". bom še to dodal v vse .h datoteke.
_________________ Dobrga štromarja samo slab šnops strese! |
|
Nazaj na vrh |
|
|
damo Član
Pridružen-a: Čet 31 Jul 2003 13:45 Prispevkov: 2008 Aktiv.: 8.98 Kraj: Krško
|
Objavljeno: Pet Dec 26, 2014 7:35 pm Naslov sporočila: |
|
|
vpeter je napisal/a: |
Strukture definiraj v h datoteki. |
Če definicijo strukture prestavim iz HPSD4000.c v HPSD4000.h, mi compiler javlja napako, sicer pa je vse ok.
_________________ Dobrga štromarja samo slab šnops strese! |
|
Nazaj na vrh |
|
|
tilz0R Član
Pridružen-a: Čet 31 Maj 2012 15:39 Prispevkov: 898 Aktiv.: 6.17 Kraj: Črnomelj
|
Objavljeno: Pet Dec 26, 2014 7:37 pm Naslov sporočila: |
|
|
To pa zato, ker imaš najprej deklaracijo spremenljivke tipa tvoje strukture, šele nato pa imaš include stavek
Zamenjaj, potem boš pa lahko v .h deklariral strukturo
_________________ Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 91 dni
Powered by phpBB © 2001, 2005 phpBB Group
|