Ist der Zeichensatz eines Char-Literals garantiert ASCII?

7

Ausgehend von einer Diskussion, die hier gestartet wurde, legt der Standard Werte für Zeichen fest? Also, ist '0' garantiert 48? Das sagt uns ASCII, aber ist es garantiert? Wenn nicht, haben Sie einen Compiler gesehen, in dem '0' nicht 48 ist?

    
Luchian Grigore 30.10.2012, 15:00
quelle

4 Antworten

16

Nein. Es ist nicht erforderlich, dass die Quell- oder Ausführungszeichensätze eine Codierung mit einer ASCII-Teilmenge verwenden. Ich habe keine Nicht-ASCII-Implementierungen gesehen, aber ich kenne jemanden, der jemanden kennt, der es hat. (Es ist erforderlich, dass '0' - '9' zusammenhängende ganzzahlige Werte haben, aber das ist eine doppelte Frage woanders auf SO.)

Die für den Quellzeichensatz verwendete Codierung steuert, wie die Bytes Ihres Quellcodes in die in der Sprache C ++ verwendeten Zeichen interpretiert werden. Der Standard beschreibt die Mitglieder des Ausführungszeichensatzes als Werte. Es ist die Codierung, die diese Zeichen ihren entsprechenden Werten zuordnet, die den ganzzahligen Wert von '0' bestimmt.

Obwohl mindestens alle Elemente des grundlegenden Quellzeichensatzes plus einige Steuerzeichen und ein Nullzeichen mit dem Wert Null im Ausführungszeichensatz vorhanden sein müssen (mit entsprechenden Werten), gibt es Es ist nicht erforderlich, dass die Codierung ASCII ist oder ASCII-Werte für eine bestimmte Teilmenge von Zeichen (außer dem Nullzeichen) verwendet wird.

    
Charles Bailey 30.10.2012, 15:01
quelle
11

Nein, der Standard ist sehr darauf bedacht, nicht anzugeben, wofür die Quellzeichen kodiert sind.

C- und C ++ - Compiler laufen auch auf EBCDIC-Computern, wissen Sie, wo '0' != 0x30 .

Allerdings glaube ich, dass '1' == '0' + 1 erforderlich ist.

    
Ben Voigt 30.10.2012 15:01
quelle
3

Es ist 0xF0 in EBCDIC. Ich habe noch nie einen EBCDIC-Compiler verwendet, aber mir wurde gesagt, dass sie eine Zeitlang bei IBM in Mode waren.

Es gibt keine Anforderung im C ++ - Standard, dass die Quell- oder Ausführungskodierungen ASCII-basiert sind. Es ist garantiert, dass '0' == '1' - 1 (und im Allgemeinen, dass die Ziffern zusammenhängend und in der Reihenfolge sind). Es ist nicht garantiert, dass die Buchstaben zusammenhängend sind, und zwar in EBCDIC 'J' != 'I' + 1 und 'S' != 'R' + 1 .

    
Steve Jessop 30.10.2012 15:02
quelle
2

Nach C ++ 11 Standard N3225

  

Die Glyphen für die Mitglieder des grundlegenden Quellzeichensatzes sind   soll Zeichen aus der Teilmenge von ISO / IEC 10646 identifizieren, die   entspricht dem ASCII-Zeichensatz. Aufgrund der Zuordnung   von Quelldateizeichen zum Quellzeichensatz (beschrieben in   Übersetzungsphase 1) wird als implementierungsdefiniert bezeichnet, a   Implementierung ist erforderlich, um die grundlegenden Quellzeichen zu dokumentieren   werden in Quelldateien

dargestellt

Kurz gesagt, der Zeichensatz muss nicht der ASCII-Tabelle zugeordnet werden, obwohl ich noch nie von einer anderen Implementierung gehört habe

    
tomahh 30.10.2012 15:04
quelle

Tags und Links