www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

C: .h datoteke, definicije globalnih spremenljivk itd..
Pojdi na stran 1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Pet Dec 26, 2014 1:30 am    Naslov sporočila:  C: .h datoteke, definicije globalnih spremenljivk itd.. Odgovori s citatom

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... Brick wall

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RUros
Član
Član



Pridružen-a: Čet 09 Mar 2006 22:26
Prispevkov: 1030
Aktiv.: 4.69

PrispevekObjavljeno: Pet Dec 26, 2014 10:21 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
RGorazd
Član
Član



Pridružen-a: Čet 20 Maj 2004 15:57
Prispevkov: 1712
Aktiv.: 7.71
Kraj: Ig

PrispevekObjavljeno: Pet Dec 26, 2014 11:38 am    Naslov sporočila:   Odgovori s citatom

Tukaj imaš vse opisano:

http://www.cplusplus.com/forum/articles/10627/

LP G

_________________
.
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._|
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Pet Dec 26, 2014 12:51 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 6.24
Kraj: Črnomelj

PrispevekObjavljeno: Pet Dec 26, 2014 3:23 pm    Naslov sporočila:  Re: C: .h datoteke, definicije globalnih spremenljivk itd.. Odgovori s citatom

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

//lib1.c
int a;

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Pet Dec 26, 2014 4:02 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 6.24
Kraj: Črnomelj

PrispevekObjavljeno: Pet Dec 26, 2014 4:11 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Pet Dec 26, 2014 5:16 pm    Naslov sporočila:   Odgovori s citatom

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

_________________
Dobrga štromarja samo slab šnops strese!


Nazadnje urejal/a damo Pet Dec 26, 2014 5:23 pm; skupaj popravljeno 1 krat
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 6.24
Kraj: Črnomelj

PrispevekObjavljeno: Pet Dec 26, 2014 5:17 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
vpeter
Član
Član



Pridružen-a: Pon 11 Jun 2012 16:05
Prispevkov: 337
Aktiv.: 2.35
Kraj: Maribor okolica

PrispevekObjavljeno: Pet Dec 26, 2014 5:29 pm    Naslov sporočila:   Odgovori s citatom

Strukture definiraj v h datoteki.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Pet Dec 26, 2014 5:31 pm    Naslov sporočila:   Odgovori s citatom

Ni skrivnost, cel projekt je 34MB, zato sem dal le glavne datoteke.


dl_HPSD4000.c
 Opis:

Download
 Ime datoteke:  dl_HPSD4000.c
 Velikost datoteke:  4.29 KB
 Downloadano:  8 krat


dl_HPSD4000.h
 Opis:

Download
 Ime datoteke:  dl_HPSD4000.h
 Velikost datoteke:  332 Bytov
 Downloadano:  7 krat


main.c
 Opis:

Download
 Ime datoteke:  main.c
 Velikost datoteke:  1.71 KB
 Downloadano:  8 krat


main.h
 Opis:

Download
 Ime datoteke:  main.h
 Velikost datoteke:  713 Bytov
 Downloadano:  5 krat


_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 6.24
Kraj: Črnomelj

PrispevekObjavljeno: Pet Dec 26, 2014 5:34 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Pet Dec 26, 2014 5:49 pm    Naslov sporočila:   Odgovori s citatom

Ja točno, "guard". bom še to dodal v vse .h datoteke.
_________________
Dobrga štromarja samo slab šnops strese!
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
damo
Član
Član



Pridružen-a: Čet 31 Jul 2003 13:45
Prispevkov: 2008
Aktiv.: 9.04
Kraj: Krško

PrispevekObjavljeno: Pet Dec 26, 2014 7:35 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 898
Aktiv.: 6.24
Kraj: Črnomelj

PrispevekObjavljeno: Pet Dec 26, 2014 7:37 pm    Naslov sporočila:   Odgovori s citatom

To pa zato, ker imaš najprej deklaracijo spremenljivke tipa tvoje strukture, šele nato pa imaš include stavek Very Happy
Zamenjaj, potem boš pa lahko v .h deklariral strukturo Very Happy

_________________
Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2, 3  Naslednja
Stran 1 od 3

 
Pojdi na:  
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: 47 dni


Powered by phpBB © 2001, 2005 phpBB Group