Re: Lepší C++ pro AVR i do Microchip studia

Pavel Hudeček edizon na seznam.cz
Neděle Leden 5 19:20:42 CET 2025


Tak jsem objevil použitelnou náhradu výjimek, která prošla:
template <class ...C> void test(C ... args) {
     uint8_t siz = sizeof...(C);
     uint8_t res[siz]={args...};

*uint8_t err = [&]() {*
*if (siz>7) return(1);*

         for (uint8_t n=0; n<7; n++) {
             if (n>=siz) {
                 ledky[n] = 0;
             } else {
*if (res[n]>=cLedValsCnt) return(2);*
                 ledky[n] = ledVals[res[n]];
             }
         }
         return 0;
*}();*

     pip(50, err);
}

Takže sekvence:
_delay_ms(1000);
test(1, 2, 3, 4, 5, 6, 7);
_delay_ms(1000);
test(7, 6, 5);
_delay_ms(1000);
test(7, 6, 5, 4, 3, 2, 1, 5);
_delay_ms(1000);
test(7, 6, 5, 4, 3, 2, 15);
udělá správné 2 kroky a místo dalších dvou (moc čísel / moc vysoký) pip 
a pip-pip.

Poznámka pro ty co nevědí o co jde:
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.

To je bomba, naprosto zásadní vychytávka:-)

PH

Dne 04.01.2025 v 10:52 Miroslav Mraz napsal(a):
> 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.
> 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.
> 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.
>
> Mrazík
>
> 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.
>
> On 04. 01. 25 2:23, Pavel Hudeček wrote:
>> 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.
>> ...
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20250105/05f85599/attachment.htm>


Další informace o konferenci Hw-list