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