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