Re: doplnění prvků do struktury
Martin Záruba
swz na volny.cz
Středa Květen 8 09:30:14 CEST 2024
Tomu rozumím, ale nějak mi nedochází, co vznikne z. Do struktury
pochopitelně mohu vložit další strukturu, ale co se stane, když vložím
PROMĚNNOU typu struct, což je v té druhé definici.
struct{
size_t size;
int a;
int b;
}x;
struct{
struct x;
int c;
int d;
}x_ext;
Tedy co vlastně obsahuje x_ext
Martin Záruba
Dne 8.5.2024 v 9:09 Jaroslav Buchta napsal(a):
> size je tam podle me pro kontrolu, ze je struktura spravneho typu a
> navic si pak muze funkce rozlisit, jakeho konkretniho typu, pokud je
> vic variant. Pokud potrebuje jen tu zakladni, tak ta je k dispozici
> vzdy, pokud chce pristupovat na nejake rozsireni, mela by si aspon
> zkontrolovat velikost, jestli nesaha mimo.
> A soucasti struktury mohou byt dalsi struktury, uniony, pole... To
> prekladac pochopi spravne a proste to tam vlozi. Pokud je vlozena
> struktura nepojmenovana, pristupuje se k prvkum jako by to struktura
> nebyla, predpokladam.
> takze kdyz napisu:
>
> union {
> struct {
> int a;
> int b;
> };
> char c[256];
> } u;
>
> tak muzu psat u.x[0] = 1; u.a = 123; ...
> samozrejme musi byt ruzne identifikatory, typicky je to zajisteno
> nejakym prefixem.
>
> Dne 08.05.2024 v 7:58 Martin Záruba napsal(a):
>>
>> Nějak mám dlouhé vedení....
>>
>> K čemu je size_t size; v strukturách?
>>
>> Jak se při použití x_ext v posledním zápisu struktury dostanu na
>> prvek a? Není mi jasné, co kompilátor vytvořil z poslední definice
>> x_ext, protože neřve. Ale x přece není popis struktury, ale proměnná
>> typu struct
>>
>>
>> Martin Záruba
>> Dne 7.5.2024 v 23:27 Miroslav Šinko napsal(a):
>>> Inspirujte sa napr. vo WinAPI. Nejdem nic kopirovat, napisem pointu:
>>>
>>> struct{
>>> size_t size;
>>> int a;
>>> int b;
>>> }x;
>>>
>>> Potom si niekto moze spravit:
>>> struct{
>>> size_t size;
>>> int a;
>>> int b;
>>> int c;
>>> int d;
>>> }x_ext;
>>>
>>> Aby nebolo treba copy/paste, tak takto:
>>> struct{
>>> struct x;
>>> int c;
>>> int d;
>>> }x_ext;
>>>
>>> Kazdy je povinny pri naplnani struktury vyplnit
>>> size=sizeof(<moja_struktura>) a pri pouziti si skontrolovat size, ci
>>> mozem pristupovat na premenne svojej struktury.
>>>
>>> miro
>>>
>>>
>>> On 7.5.2024 18:02, Martin Záruba wrote:
>>>> Mám soubor, třeba muj.h ve kterém je deklarovaná struktura x, třeba
>>>>
>>>> struct{
>>>> inta;
>>>> int b;
>>>> }x;
>>>>
>>>> Soubor je pomocí include vložen do hlavního programu. A já bych
>>>> potřeboval, aby uživatel, který použije #include muj.h mohl do té
>>>> struktury vložit další prvky, takže struktura by se o tyto prvky
>>>> (které v ní nejsou definované) rozšířila. Vymyslel jsem toto:
>>>>
>>>> structstru {
>>>> inta;
>>>> int b;
>>>> #ifdefuser
>>>> user
>>>> #endif
>>>> };
>>>>
>>>> A v uživatelském programu použít
>>>>
>>>> #defineuser\
>>>> intc; \
>>>> intd;
>>>>
>>>> Asi to vypadá jako divný požadavek, ale mě jde o to, aby struktura
>>>> x byl jeden prvek, který obsahuje jak mé, tak uživatelem vytvořené
>>>> členy.
>>>>
>>>> Je na tom něco v nepořádku nebo to lze udělat líp?
>>>>
>>>>
>>>> --
>>>>
>>>> Martin Záruba
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> HW-list mailing list - sponsored by www.HW.cz
>>>> Hw-list na list.hw.cz
>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>>
>>> _______________________________________________
>>> HW-list mailing list - sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list - sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240508/abec4dea/attachment.htm>
Další informace o konferenci Hw-list