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