Wiem, że standardy C i C ++ pozostawiają wiele aspektów implementacji języka tylko dlatego, że gdyby istniała architektura o innych cechach, byłoby bardzo trudne lub niemożliwe napisanie dla niej kompilatora zgodnego ze standardami.
Wiem, że 40 lat temu każdy komputer miał swoją własną, unikalną specyfikację. Jednak nie znam żadnej architektury używanej dzisiaj, gdzie:
CHAR_BIT != 8
signed
nie jest uzupełnieniem do dwóch (słyszałem, że Java miała z tym problemy).- Liczba zmiennoprzecinkowa nie jest zgodna z IEEE 754 (Edycja: miałem na myśli „nie w kodowaniu binarnym IEEE 754”).
Pytam, ponieważ często wyjaśniam ludziom, że to dobrze, że C ++ nie narzuca żadnych innych aspektów niskiego poziomu, takich jak typy o ustalonej wielkości † . Jest to dobre, ponieważ w przeciwieństwie do `` innych języków '' sprawia, że twój kod jest przenośny, gdy jest używany poprawnie (Edycja: ponieważ można go przenieść na więcej architektur bez konieczności emulacji niskopoziomowych aspektów maszyny, takich jak np. Arytmetyka dopełniająca do dwóch na architekturze znak + wielkość) . Ale czuję się źle, że sam nie mogę wskazać żadnej konkretnej architektury.
A więc pytanie brzmi: jakie architektury wykazują powyższe właściwości?
† uint*_t
s są opcjonalne.