<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Historie nás učí. To už říkal nějaký velikán. Nebyl to Lenin?<br>
<br>
O Vašem konkrétním nasazení nevím nic. Takže musím mluvit obecně.<br>
<br>
Zamyslel bych se nad tím, jestli se takový postup používá i jinde. A
pokud ne, tak proč ne.<br>
Proč se nepoužívá třeba u knihoven Windows nebo Linux, které
používají desítky a stovky tisíc programátorů?<br>
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á.<br>
<br>
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.<br>
<br>
Pokud víte, že má smysl Vaši strukturu rozšiřovat - tak proč ji
nerozšíříte rovnou?<br>
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?<br>
<br>
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?<br>
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.<br>
<br>
Takže tu svou původní poznámku (na kterou jste reagoval) jsem
nemyslel tak, jak jinak to technicky vymyslet.<br>
Ale spíš jak to vymyslet koncepčně. A zamyslet se, jestli
variabilita opravdu k něčemu je.<br>
<br>
PL<br>
<br>
********************<br>
<br>
<div class="moz-cite-prefix">Dne 8.5.2024 v 7:39 Martin Záruba
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:fbfcfa94-8cf9-4468-8b09-ca86a9647d23@volny.cz">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<p><font face="Arial">Proto jsem to sem napsal. Jak byste to
udělal jinak?<br>
</font></p>
<p><font face="Arial">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.</font></p>
<p><font face="Arial">Prostě #define user .... musí být před
#include. Jinak kompilátor řve, že struktura prvky, které jsou
použité neobsahuje.<br>
</font></p>
<pre class="moz-signature" cols="72">Martin Záruba</pre>
<div class="moz-cite-prefix">Dne 7.5.2024 v 20:34 Petr Labaj
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:62322832-3bec-a730-4f91-449b493d1ab0@volny.cz">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
Položil bych si 2 otázky:<br>
- Je to dobrý nápad? Opravdu je to nejvhodnější způsob a není
lepší to udělat nějak jinak?<br>
- 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ě.<br>
<br>
PL<br>
<br>
*******************<br>
<br>
<div class="moz-cite-prefix">Dne 7.5.2024 v 18:02 Martin Záruba
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:dc0e3d33-9d1d-4168-9a58-74d22f006cbc@volny.cz">
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
<p>Mám soubor, třeba muj.h ve kterém je deklarovaná struktura
x, třeba</p>
<div style="color: #4e5b61;background-color: #ffffff;font-family: Consolas, 'Courier New', monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;"><div><span style="color: #00979d;">struct</span><span style="color: #4e5b61;"> </span><span style="color: #434f54;">{</span></div><div><span style="color: #4e5b61;"> </span><span style="color: #00979d;">int</span><span style="color: #4e5b61;"> a;</span></div><div><span style="color: #4e5b61;"> int b;
</span></div><span style="color: #434f54;">}</span><span style="color: #4e5b61;"> x;</span></div>
<p>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:</p>
<div style="color: #4e5b61;background-color: #ffffff;font-family: Consolas, 'Courier New', monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;"><div><span style="color: #00979d;">struct</span><span style="color: #4e5b61;"> stru </span><span style="color: #434f54;">{</span></div><div><span style="color: #4e5b61;"> </span><span style="color: #00979d;">int</span><span style="color: #4e5b61;"> a;</span></div><div><span style="color: #4e5b61;"> int b;
</span></div><div><span style="color: #728e00;">#ifdef</span><span style="color: #4e5b61;"> </span><span style="color: #d35400;">user</span></div><div><span style="color: #4e5b61;"> user</span></div><div><span style="color: #728e00;">#endif</span><span style="color: #4e5b61;"> </span></div><div><span style="color: #434f54;">}</span><span style="color: #4e5b61;">;</span></div></div>
<p>A v uživatelském programu použít</p>
<div style="color: #4e5b61;background-color: #ffffff;font-family: Consolas, 'Courier New', monospace;font-weight: normal;font-size: 14px;line-height: 19px;white-space: pre;"><div><span style="color: #728e00;">#define</span><span style="color: #4e5b61;"> </span><span style="color: #d35400;">user</span><span style="color: #4e5b61;"> </span><span style="color: #005c5f;">\</span></div><div><span style="color: #4e5b61;"> </span><span style="color: #00979d;">int</span><span style="color: #4e5b61;"> c; </span><span style="color: #005c5f;">\</span></div><div><span style="color: #4e5b61;"> </span><span style="color: #00979d;">int</span><span style="color: #4e5b61;"> d;</span></div>
</div>
<p>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.<br>
</p>
<p>Je na tom něco v nepořádku nebo to lze udělat líp?<br>
</p>
<p><br>
</p>
<pre class="moz-signature" cols="72">--
Martin Záruba</pre>
<br>
</blockquote>
</blockquote>
</blockquote>
<br>
</body>
</html>