2010-09-16 10 views

Antwort

11

GCC tut. Aber nur beim Kompilieren für Plattformen, bei denen ein nicht signiertes Zeichen die Konvention ist, einschließlich ARM linux [*]. Wenn GCC für x86 kompiliert wird, ist der Standardwert, dass char signiert wird.

[*] Oder zumindest war es in der Vergangenheit. Soweit ich weiß, hat Linux seither auf einen anderen Standard-ABI auf ARM gewechselt.

Update '2013: ARM-Compiler (GCC, Clang) für Android NDK standardmäßig auf unsigned char. Die x86- und MIPS-Compiler sind standardmäßig signed char.

2

Es ist in der Regel eine Option, es als Standard festlegen, aber kein Compiler meines Wissens das tut.

+2

Es gibt. In MSVC verwenden Sie ['/ J' (Standardzeichenart ist nicht signiert)] (https://msdn.microsoft.com/en-us/library/0d294k5z.aspx). In GCC verwenden Sie ['-funsigned-char'] (http://stackoverflow.com/a/20518559/995714) –

4

Der Standard erfordert, dass der ganzzahlige Wert aller Zeichen, die vom Standard gefordert werden (AZ, az, 0-9, Grundzeichen usw.), positiv ist, also jedes System, das eine Codierung verwendet, bei der die Werte dieser Zeichen außerhalb des Bereichs liegen Bereich von signed charmüssen haben char haben unsigned. Ich glaube, das bedeutet, dass alle EBCDIC-Systeme eine einfache char haben müssen, die unsigniert ist, aber ich kann mich irren.

+4

Wenn' CHAR_BIT'> 8 ist der Wertebereich für 'char' größer als -128..127 oder 0..255. Auf einem EBCDIC-System mit CHAR_BIT == 9 kann also ein einfaches "char" signiert werden. – pmg