Re: doplnění prvků do struktury

Petr Labaj labaj na volny.cz
Středa Květen 8 15:05:13 CEST 2024


Historie nás učí. To už říkal nějaký velikán. Nebyl to Lenin?

O Vašem konkrétním nasazení nevím nic. Takže musím mluvit obecně.

Zamyslel bych se nad tím, jestli se takový postup používá i jinde. A 
pokud ne, tak proč ne.
Proč se nepoužívá třeba u knihoven Windows nebo Linux, které používají 
desítky a stovky tisíc programátorů?
A jistě jsou použity ve velmi rozmanitém nasazení. Zřejmě širším, než 
jaké připadá v úvahu u Vašeho řešení. A kde by nějaká modifikace spíš 
mohla být potřebná.

Pokud se používá nějaká standardní knihovní funkce (třeba 
"spocti(x,y)"), a časem se ukáže, že by parametry měly být obsažnější, 
tak vznikne něco jako "spocti_ex(x,y,z)" se širšími parametry.

Pokud víte, že má smysl Vaši strukturu rozšiřovat - tak proč ji 
nerozšíříte rovnou?
A pokud to rozšíření nedává smysl Vám (autorovi), tak jaká je 
pravděpodobnost, že bude dávat smysl někomu jinému?

A pokud už by mu přece jen dávala smysl, tak stejně nějakou 
kompatibilitu bude mít jen na úrovni zdrojáku, ne hotových knihoven. Tak 
proč by si to nepřidal přímo do toho původního *.h?
Nějaká binární zpětná kompatibilita možná nebude, protože dříve 
přeložené knihovny by nic nevěděly o tom, že si uživatel ve svém 
programu strukturu natáhl.

Takže tu svou původní poznámku (na kterou jste reagoval) jsem nemyslel 
tak, jak jinak to technicky vymyslet.
Ale spíš jak to vymyslet koncepčně. A zamyslet se, jestli variabilita 
opravdu k něčemu je.

PL

********************

Dne 8.5.2024 v 7:39 Martin Záruba napsal(a):
>
> Proto jsem to sem napsal. Jak byste to udělal jinak?
>
> Potřebuji, aby z dat vznikl souvislý blok, který bude čten nadřazeným 
> systémem jako souvislá oblast paměti. Bude obsahovat tu moji 
> strukturu, což jsou ve skutečnosti data z bms. A za ní uživatelem 
> specifikovaná (možná jím budu já, ale chci zajistit, aby do toho 
> modulu bms se nemuselo zasahovat), která nevím, co přesně budou 
> obsahovat. Nenapadá mě zatím jiný způsob. Přes pointer to nejde, musím 
> být schopen odeslat data, ne pointer.
>
> Prostě #define user .... musí být před #include. Jinak kompilátor řve, 
> že struktura prvky, které jsou použité neobsahuje.
>
> Martin Záruba
> Dne 7.5.2024 v 20:34 Petr Labaj napsal(a):
>> Položil bych si 2 otázky:
>> - Je to dobrý nápad? Opravdu je to nejvhodnější způsob a není lepší 
>> to udělat nějak jinak?
>> - Bude zajištěno, že v době kdy se bude zpracovávat ten muj.h už je 
>> zpracován ten header, kde je případně definováno USER? Tohle se 
>> (predpokládám) zpracovává jednoprůchodově.
>>
>> PL
>>
>> *******************
>>
>> Dne 7.5.2024 v 18:02 Martin Záruba napsal(a):
>>>
>>> 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
>>>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240508/bb0a8a55/attachment.htm>


Další informace o konferenci Hw-list