Pokud použiju separátní tool (který ani nezná kompletní syntaxi C) abych jím lepil platformně závislé kousky textu dohromady, můžu ještě mluvit o přenositelném jazyce?
V C lze psát jak přenositelně, tak nepřenostitelně. Které věci jsou přenositelné, a které ne, je nutné znát.
A věci jako endiany nebo jestli mám vůbec dvojkový doplněk se zjišťují hůř.
Na to stačí jednoduchý #ifdef
případně runtime detekce se dá udělat taky, jak pro endianitu, tak pro dvojkový doplněk.
Tak zrovna u charu je to "implementation defined". Takže jazyk C definuje jen to, že to kompilátor "overridnout" prostě musí.
u charu ano. U unsigned charu a signed charu nikoliv, ty jsou jasně definované. Jazyk je nabízí... takže co, zase tu budu řešit že někdo chtěl unsigned char a to unsigned tam nenapsal (a naopak)? Tady žádný problém v přenositelnosti z pohledu jazyka není.
Ano, v C se dá psát přenositelný kód. Ale protože je to jazyk z punkových časů, tak toho ta přenositelná podmnožina až tak moc neumí. A málo šedivé programátory to může překvapit, protože spousta těch věcí z dnešního pohledu už fakt nedává smysl.
Super, takže se shodneme - C je přenositelný jazyk. Tímto můžeme debatu uzavřít.