Re: doplnění prvků do struktury

Jaroslav Buchta jaroslav.buchta na hascomp.cz
Středa Květen 8 09:09:59 CEST 2024


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

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240508/2d360188/attachment.htm>


Další informace o konferenci Hw-list