2010-09-16 20 views

Odpowiedz

11

GCC ma. Ale tylko podczas kompilacji dla platform, na których jest unsigned char to konwencja, w tym ARM linux [*]. Gdy GCC kompiluje się dla x86, domyślnie jest to znak char do podpisu.

[*] Lub przynajmniej było w przeszłości. Z tego, co wiem, od tego czasu linuks przełączył się na inny domyślny ABI na ARM.

Aktualizacja „2013: ARM kompilatorów (GCC, dzyń) dla Android NDK domyślnie do unsigned char. Kompilatory x86 i MIPS są domyślnie ustawione na signed char.

2

Zwykle jest opcja aby ustawić go jako domyślny, ale nie kompilatora mojej wiedzy to robi.

+2

Jest. W MSVC używasz ['/ J' (Domyślny char Type jest unsigned)] (https://msdn.microsoft.com/en-us/library/0d294k5z.aspx). W GCC używasz ['-funsigned-char'] (http://stackoverflow.com/a/20518559/995714) –

4

Standard wymaga, aby całkowita liczba wszystkich znaków wymaganych przez standard (AZ, az, 0-9, podstawowa interpunkcja itp.) Była dodatnia, więc każdy system używa kodowania, w którym wartości tych znaków znajdują się poza zakres signed charmusi mieć zwykły char być unsigned. Sądzę, że oznacza to, że wszystkie systemy EBCDIC muszą mieć zwykły char, który jest niepodpisany, ale mogę się mylić.

+4

Jeśli' CHAR_BIT'> 8 zakres wartości 'char' jest większy niż -128..127 lub 0..255. Tak więc, w systemie EBCDIC z CHAR_BIT == 9, zwykły 'char' może być podpisany. – pmg