<!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>