Re: doplnění prvků do struktury
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Středa Květen 8 10:43:38 CEST 2024
Ted jsem se do toho zamotal teda taky, musel bych si to vyzkouset.
Ale mam podezreni, ze
struct{
struct x;
int c;
int d;
}x_ext;
vytvori strukturu x s delkou 0B a nicim uvnitr a nijak nesouvisi s
globalni promennou x ? Zkusil bych udelat ruzne identifikatory.
V tom novem prikladu to prekladac pobere? Nemelo by byt: struct y x; ?
Protoze y je jmeno struktury a x v prvnim bloku je instance promenne te
struktury myslim...
Dne 08.05.2024 v 10:33 Martin Záruba napsal(a):
>
> Nějak mi to hlava nebere. Pokud napíšu:
>
> structy{
> size_tsize;
> inta;
> intb;
> }x;
> struct{
> y x;
> intc;
> intd;
> }x_ext;
>
> říkám že struktura x_ext má na začátku strukturu x kterou popisuje y.
> Pak se na prvky v ní mohu odkazovat
>
> x_ext.x.a
>
> ale pokud místo y v druhé struktuře použiju slovo struct, znamená to,
> že vznikne to samé, ale prvky z první struktury jsou nedostupné? Pokud
> ano, k čemu je to dobré?
>
> Pokud to ale udělám, tak, jak jsem to napsal, vznikly dvě proměnné x a
> x_ext. Logicky pokud změním x.a nezmění se x_ext.x.a. Takže to nejde
> takto použít.
>
> Jenže já potřebuji, aby se původní struktura, v našem příkladu x
>
> 1) rozšířila o prvky c, d přičemž všechny prvky (nejen ty nové) byly
> dostupné
>
> 2) aby struktura obsazovala souvislou oblast paměti. Tato oblast se
> pak předává jako pointer a délka rutině, která přes ethernet data
> přenese na server. Je docela složitá a nechci, aby se do ní muselo
> vrtat. Pouze zavolat s těmito dvěma parametry.
>
> Martin Záruba
> Dne 8.5.2024 v 9:34 Jaroslav Buchta napsal(a):
>> x ale neni promenna ale jmeno struktury. To je to same, jako byste ji
>> tam rozepsal treba jako mam v prikladu.
>> promenna treba y by se definovala
>> struct x y;
>>
>> Dne 08.05.2024 v 9:30 Martin Záruba napsal(a):
>>>
>>> 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
>>>
>>> _______________________________________________
>>> 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
>
> _______________________________________________
> 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/63f95c51/attachment.htm>
Další informace o konferenci Hw-list