c: MISRA2012
Miroslav Mraz
mrazik na volny.cz
Čtvrtek Březen 25 20:41:02 CET 2021
Zaručuje norma, že bude daný výraz vyhodnocen při překladu ?
C++ constexpr ano. Ale nesežere jakýkoli výraz, to že sežere lround() je
asi víceméně náhoda a vlastnost daného překladače. Nicméně nějaká
funkce, která omezí hodnotu double tam být musí, double může být
teoreticky vždy větší než jakákoli celočíselný typ.
static inline const uint8_t sat_u8 (const double x) {
return x < 0.0 ? 0u : x > 255.0 ? 0xffu : (const uint8_t) x;
}
...
const uint8_t x = sat_u8 (20.1 / 1.1);
Pokud z toho udělám constexpr v C++, bude to korektní pro jakýkoli
překaldač C++11 a spočítá se to při překladu. V C nevím, jestli dojde k
vyhodnocení při překladu, ale stejně je to už hodně překombinované a co
by na to MISRA se mi fakt nechce zkoumat.
Jak píše wek, dejte tam místo volatile const a bude hotovo.
Mrazík
Dne 25. 03. 21 v 19:25 Jan Waclawek napsal(a):
>> Asi jsem měl napsat, že chci, aby to tu konstantu vypočítalo při překladu. Tohle je očesané na kost, abych se nějak dopídil k rozuzlení.
>
> No tak potom tam nesmiete pchat to volatile k tomu tmp.
>
> wek
>
Další informace o konferenci Hw-list