<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Tak jsem objevil použitelnou náhradu výjimek, která prošla:<br>
template <class ...C> void test(C ... args) {<br>
uint8_t siz = sizeof...(C);<br>
uint8_t res[siz]={args...};<br>
<br>
<b>uint8_t err = [&]() {</b><br>
<b> if (siz>7) return(1);</b><br>
<br>
for (uint8_t n=0; n<7; n++) {<br>
if (n>=siz) {<br>
ledky[n] = 0;<br>
} else {<br>
<b>if (res[n]>=cLedValsCnt) return(2);</b><br>
ledky[n] = ledVals[res[n]];<br>
}<br>
}<br>
return 0;<br>
<b>}();</b><br>
<br>
pip(50, err);<br>
}<br>
<br>
Takže sekvence:<br>
_delay_ms(1000);<br>
test(1, 2, 3, 4, 5, 6, 7);<br>
_delay_ms(1000);<br>
test(7, 6, 5);<br>
_delay_ms(1000);<br>
test(7, 6, 5, 4, 3, 2, 1, 5);<br>
_delay_ms(1000);<br>
test(7, 6, 5, 4, 3, 2, 15);<br>
udělá správné 2 kroky a místo dalších dvou (moc čísel / moc vysoký)
pip a pip-pip.<br>
<br>
Poznámka pro ty co nevědí o co jde:<br>
Ta věc s []() se jmenuje lambda funkce a narozdíl od třeba
do{...}while(0) se z ní, stejně jako z funkce normální, utíká
returnem a ten zas funguje vždycky stejně rovnou ven za }(), což by
třeba zrovna tady s break z do{for}nešlo tak přímočaře.<br>
<br>
To je bomba, naprosto zásadní vychytávka:-)<br>
<br>
PH<br>
<br>
<div class="moz-cite-prefix">Dne 04.01.2025 v 10:52 Miroslav Mraz
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:210f8f99-c93f-4a59-8bfc-bf2c53d4c88a@volny.cz">To je
normální asi u všech IDE. Uvnitř to používá pro kontrolu syntaxe
nějaký svůj systém, nezávislý na překladači. Měl by být závislý
pouze na verzi standardu C++ a mělo by to jít nastavit.
<br>
Já používám kdevelop, tam se používá pro kontrolu syntaxe jádro
clang a opravdu podtrhává chyby v závislosti na tom jakou verzi
C++ v projektu nastavím.
<br>
Co se týká výjimek, v bare-metal to není dobrý nápad. Takhle jak
to píšete to vypadá jednoduše, jakoby program skočil jen někam
jinam, o kousek dál. Ale výjimky v C++ jsou pojaty velice široce,
musí umět "probublat" kódem úplně někam jinam, takže ve výsledku
je to složité a potřebuje to spoustu serepetiček okolo.
<br>
<br>
Mrazík
<br>
<br>
PS. Nedávno jsem se bavil se svým bývalým kolegou o použití
šablon. Připletl se do toho bývalý šéf, také programátor, vytvořil
jádro výjezdového systému pro IZS v C++, takže nic moc
jednoduchého. A řekl k tomu jen stručně - "Jo šablony, to jsem
snad v životě nepoužil". Holt každý má svůj styl.
<br>
<br>
On 04. 01. 25 2:23, Pavel Hudeček wrote:
<br>
<blockquote type="cite">Zajímavé ale je, že se mi u všech řádků,
kde se test(něco) používá, objevuje "error" required from here,
ale překlad proběhne a program funguje.
<br>
...
<br>
</blockquote>
</blockquote>
</body>
</html>