1
Vývoj / Re:Rozdíl mezi ASM a strojovým kódem
« Poslední příspěvek od vrit kdy Dnes v 14:26:25 »Tu podmíněnou kompilaci ale nedělá jazyk C ale C preprocesor.Tak jakto že The C Programming Language od Kernighana a Ritchieho z roku 1978 zmiňuje preprocesor?
Je to separátní tool, který ani nerozumí kompletní syntaxi C a používá se i pro jiné jazyky. Integrace preprocesoru do překladače proběhla až relativně nedávno, protože to oddělení mělo nepříjemné důsledky na použitelnost.
Abych dostal to makro ENDIANESS tak musím mít někde mrtě platformně závislé logiky.To je prosím celá mrtě logika, která je potřeba pro detekci endianity buildtoolem - ten checkne návratový kód.
Kód: [Vybrat]
#include <stdint.h>
int main(void)
{
uint32_t x = 1;
uint8_t *p = (uint8_t *)&x;
return p[0] == 1;
}
Ano na nějakých exotických systémech to asi i tak selže, ale umí toto nějaký jazyk lépe? V praxi na jakémkoliv moderním systému to bude fungovat.Další věc je, že endianita se dá kompletně odstínit pomocí OR a posuvů, takový kód je pak na endianitě nezávislý.
Btw, drtivá většina C kódu není přenositelná, ale je psaná v nějakém platformně závislém dialektu. Je to proto, že v přenositelné podmnožině C chybí naprosto zásadní věci. Např linux není psaný v C ale v GCC dialektu a při portování do clangu se do něj ten GCC dialekt přidal.Linux je nejpřenositelnější OS jaký existuje
No a nemyslím si že používají GCC kvůli tomu že by C nebylo přenositelné. Inline assembler je spíše praktická věc pro OS kód. Různé builtin funkce jsou spíše optimalizační techniky. Makro typeof zase umožňuje generičtější kód, což jenom šetří psaní... dalo by se bez toho všeho obejít. Které věci z GCC dialektu jsou striktně kvůli přenositelnosti bez kterých by se nedalo obejít?
Poslední příspěvky