Re: Globální proměnné v C

Miroslav Šinko sinkomiro na gmail.com
Pondělí Únor 27 16:50:12 CET 2012


*.h uvidia iba tie *.c, v ktorych je includnute. Preto ak mate nejake
typedef, #define, prototypy funkcii apod, ktore maju vidiet viacere
*.c, uvediete ich v nejakom *.h a to includnete do prislusnych *.c. Ak
ale mate v takom *.h definiciu instancie premennej (prip. tela
funkcie..), ta sa potom vytvori pri preklade kazdeho *.c, v ktorom je
include toho *.h. A linker vyhlasi chybu.. Na to sluzi ten extern,
vsetkym prislusnym *.c zdrojakom oznamuje, ako je premenna
deklarovana, t.j. kompilacia sa podari, ale instancia sa vytvori iba v
jedinom *.c.

miro

2012/2/27 Miroslav Draxal <evik na volny.cz>:
> Jo, asi takhle. Zkusim to. U celá deklerace včetně přiřazení vychází z
> nepochopení C. mylně jsem se domníval, že pokud to vystavým v *h, tak to
> ostatní *.c uvidí.Prostě to budu muset icludovat křížově. Tak trochu jsem se
> domníval, že je to podobně jako např. ve vis.bas. míra
>
> -----Original Message-----
> From: hw-list-bounces na list.hw.cz [mailto:hw-list-bounces na list.hw.cz] On
> Behalf Of Miroslav Šinko
> Sent: Monday, February 27, 2012 4:31 PM
> To: HW-news
> Subject: Re: Globální proměnné v C
>
> 2012/2/27 Miroslav Draxal <evik na volny.cz>:
>> 2/
>>
>> Spi.h
>>
>> typedef struct _SPIout_bity_flag
>>
>>                {             unsigned CanSleep          :1;
>>
>>                               unsigned Set12V              :1;
>>
>>                }_SPIout_bity;
>>
>>
>>
>> _SPIout_bity SPIout_bity;
>
> Toto je zle, v *.h si nemate co definovat instancie premennych
> (SPIout_bity). V *.h si nechajte iba typedef. Instanciu si definujte v *.c,
> kde ju potrebujete. Pravdepodonbe v spi.c. Ak potrebujete pristup k
> instancii struktury aj z inych *.c, do spi.h pridajte extern _SPIout_bity
> SPIout_bity; V tych inych zdrojakoch potom #include "spi.h"
>
> miro
>
>
>>
>>
>> klavesnice.c
>>
>> typedef struct _SPIout_bity_flag
>>
>>                {             unsigned CanSleep          :1;
>>
>>                               unsigned Set12V              :1;
>>
>>                }_SPIout_bity;
>>
>>
>>
>> extern _SPIout_bity SPIout_bity;
>>


Další informace o konferenci Hw-list