Automaticke pretypovani u AVR-GCC
Lukáš Grepl
L.Grepl@sh.cvut.cz
Středa Červenec 22 13:59:53 CEST 2009
> trojku převedl na int, což jak píšete odpovídá ANSI C. Ale proč to tedy
> dodržuje překladač podle nálady? To už asi zůstane nezodpovězeno.
> Odpovědí je zřejmě asi IAR.
Každý překladač (resp. jeho optimalizátor) zná určité "zkratky", kde
určitý kus kódu v některých určitých variantách (které zná) přeloží lépe
než obecně. Ale prostě ne všechny obvyklé varianty ten optimalizátor umí.
Lépe optimalizující kompilátor takových zkratek zná víc a dokáže je
použít v širším spektru případů, než horší kompilátor, který vše
překládá "doslova". No a samozřejmě prográtoři kompilátorů jsou taky
lidé, takže občas na něco zapomenou.
Např. jsem se setkal s tím, že jsem měl kus kódu asi tohoto znění:
unsigned long x;
unsigned char a1, a2, a3, a4;
a1 = x;
a2 = x >> 8;
a3 = x >> 16;
a4 = x >> 24;
který se přeložil tak, že první tři přiřazení prostě vybraly ten správný
byte z dwordu x, zatímco to čtvrté se přeložilo jako smyčka s 24
iteracemi rotace po jednom bitu.
Lukáš Grepl
Další informace o konferenci Hw-list