Begründung
- Die Sprache C stellt die Anzahl der Bits pro Byte als implementierungsdefiniert über das Makro
CHAR_BIT bereit, und C++ übernimmt dies unverändert
- Moderne Hardware konvergiert weitgehend auf die Annahme, dass ein Byte 8 Bit hat
- Dieses Dokument schlägt vor, in C++ offiziell festzulegen, dass ein Byte 8 Bit hat
- Wichtige Compiler unterstützen bereits 8-Bit-Bytes
- GCC setzt den Standardwert auf 8
- LLVM setzt
__CHAR_BIT__ auf 8
- MSVC definiert
CHAR_BIT als 8
- POSIX verlangt seit 2001 8-Bit-Bytes
- Software, die keine 8-Bit-Bytes unterstützt, ist nicht kompatibel
Auswirkungen auf C
- Dieser Vorschlag untersucht, ob C++ für Architekturen mit Bytes, die nicht 8 Bit haben, relevant ist
- Das C-Sprachkomitee könnte zu einem anderen Schluss kommen, und es wäre ideal, wenn beide Komitees übereinstimmen
Sprache
- Im C++-Speichermodell ist die grundlegende Speichereinheit das Byte, und ein Byte besteht aus 8 Bit
- Das Makro
CHAR_BIT wird im Header climits bereitgestellt
Bibliothek
- Der Header
climits definiert wie der C-Standardbibliotheks-Header limits.h alle Makros
- Der Header
cstdint stellt Ganzzahltypen mit festgelegter Breite sowie Makros bereit, die die Grenzen von Ganzzahltypen angeben
- Alle Typen und Makros sind nur dann nicht optional, wenn ein Byte 8 Bit hat
Zusammenfassung von GN⁺
- Dieses Dokument ist ein Vorschlag, in C++ offiziell festzulegen, dass ein Byte 8 Bit hat
- Moderne Hardware- und Softwareplattformen verwenden überwiegend 8-Bit-Bytes, sodass eine Standardisierung davon sinnvoll ist
- Architekturen mit Nicht-8-Bit-Bytes sind mit modernem C++ nicht kompatibel, und ihre Bedeutung nimmt ab
- Dieser Vorschlag reduziert die Komplexität von C++ und hilft neuen Programmierern, die Sprache leichter zu verstehen
- Ein anderes Projekt mit ähnlicher Funktion ist der POSIX-Standard
1 Kommentare
Hacker-News-Kommentare
In JFs Reihe „Can we acknowledge that every real computer works this way?“ gab es eine Erwähnung von „Signed Integers are Two’s Complement“
Die Sprache D hat in folgenden Punkten große Fortschritte gemacht
shorthat 16 Bitinthat 32 Bitlonghat 64 BitManche Leute arbeiten immer noch mit DSPs
Persönlich macht es Spaß, eine 12-Bit-Fantasy-Konsole zu dokumentieren, die „50 % mehr Bits pro Byte als die Konkurrenz“ bietet
Es gab die Frage, was C++ verwerfen oder vereinfachen könnte
rand()sei kaputt und nicht reparierbar, und dennoch sei sie bis heute nicht deprecatedIch habe gemischte Gefühle dabei, dass es keinen sinnvollen Anwendungsfall mehr dafür gibt, dass
CHAR_BITeinen anderen Wert als 8 hatVielen Dank für das Interesse an dem Vorschlag; auf Basis des Feedbacks wurde ein aktualisierter Entwurf erstellt
Ich mag die Idee eines Retro-Mikrocomputers mit 6-Bit-Bytes
Ich stimme zu,
int8_t == char == 8 Bitzu erzwingen, aber ich bin nicht sicher, ob es gut ist, das Missverständnis zu verbreiten, ein Byte habe immer 8 Bitchar