c:
Josef Štengl
ok1ced na nagano.cz
Neděle Červenec 9 10:50:43 CEST 2017
A jak to ten kompilátor má vědět? Není to žádná umělá inteligence, jen soubor pravidel.
Pro kompilátor je to přiřazení známé konstanty signed int do unsigned char. Další operace je logická operace a nemění typ
výrazu.
Mimochodem, původně jsem si podle čísla myslel, že char je 16 bit, pak mi došlo že by to ale nehlásilo to varování :-)
Řešení bych viděl potlačit na daném řádku varování kompilátoru například pomocí pragmy kompilátoru (pak ho zase
nezapomenou povolit). S příslušným vysvětlujícím komentářem proč dávám do 8 bitové unsigned proměnné 16 bit signed číslo.
Dne 8.7.2017 v 21:50 Jan Waclawek napsal(a):
>> volatile unsigned char x = 0x0111 & 0xff;
>> stále
>> warning: (751) arithmetic overflow in constant expression
>>
>
> Hm.
>
> Nerozumiem preco. Podla 5.4.6.1 manualu by operandy mali mat typ int (t.j.
> 16-bit znamienkovy), lebo sa do neho zmestia, takze nema co pretiect pri
> usual arithmetic conversions. V bitwise AND by nemalo mat co pretiect.
>
> Nepouzivate nejaky obskurny prepinac co meni sirku defaultnych typov (ak
> take XC8 vobec ma)?
>
> Je toto riadok v trivialnom programe typu
>
> int main(void) {
> volatile unsigned char x = 0x0111 & 0xff;
> }
>
> ?
>
> wek
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list