Fwd: STM CUBE - zkusenosti

Miroslav Mraz mrazik na volny.cz
Pondělí Říjen 5 15:16:39 CEST 2015


V C++ je syntaxe pro explicitní přetypování, takže lze napsat např.
   static const uint8_t pole[] = {1,2,3,4,5,6};
   volatile uint32_t x = * reinterpret_cast<const uint32_t *> (pole + 1);
ale jak konstatuje Bruce Eckel, je to stejně nebezpečné jako přetypování 
v C, překladač vám však nenadává, protože je přesvědčen, že víte co 
děláte. Shodneme se asi na tom, že je lépe takovéto konstrukce vůbec 
nepoužívat, hlavně pokud mají být programy přenositelné. Tahle 
konstrukce určitě nebude přenosná mezi malým a velkým indiánem.

Mrazík

Dne 5.10.2015 v 10:45 Jan Waclawek napsal(a):
>> Vąechno se vyvíjí. Před pár lety jsme zde diskutovali, zda konstrukce
>>    static const uint8_t pole[] = {1,2,3,4,5,6};
>>    volatile uint32_t x = * (uint32_t *) (pole + 1);
>> je korektní nebo ne. Tehdy to na Cortex-M0 padalo do hard-fault, dneąní
>> verze gcc (4.9.3) to přeloľí korektně. Stále ale platí, ľe při podobném
>> přetypování je lépe se podívat do listingu, co s tím vlastně překladač
>> provedl.
>
> Z pohladu normy je to stale rovnako ako pred tymi par rokmi implementation
> defined, norma priamo varuje ze to moze byt "trap".
>
> Inaksie povedane, type punning, ci uz takto cez pretypovanie pointra alebo
> cez union je neprenositelny. To je vlastne ten "vyvoj" - treba to chapat
> skor ako rozsirenie gcc nez ako vseobecne spravny zapis.
>
> Tym netvrdim, ze ja osobne to nepouzivam - pouzivam, ako aj ine
> neprenositelne konstrukcie.
>
> Nie je vylucene, ze casom C alebo C++ dospeje k zapisu, ktorym programatori
> nejakym citatelnym a konzistentnym sposobom budu vediet prekladacu
> "povedat" ze chcu urobit ten type punning, ale zatial to tak nie je, takze
> to treba akceptovat ako fakt.
>
> (Inak ja osobne sa snazim vyvarovat aj zapisu (pole + 1), radsej to zapisem
> &(pole[1]), bo na pointrovej aritmetike som sa uz tiez niekolkokrat
> neprijemne popalil; ale to je len osobna preferencia to nema nic spolocne
> s normou ani prekladacmi)
>
>
> wek
>
>


Další informace o konferenci Hw-list