2010-09-16 40 views

Répondre

11

GCC fait. Mais seulement lors de la compilation pour les plates-formes où un char non signé est la convention, y compris ARM linux [*]. Lorsque GCC compile pour x86, le caractère par défaut doit être signé.

[*] Ou du moins, cela a été dans le passé. Pour tout ce que je sais, linux est passé à un autre ABI par défaut sur ARM depuis.

Mise à jour « 2013: compilateurs ARM (gcc, clang) pour défaut Android NDK à unsigned char. Les compilateurs x86 et MIPS par défaut à signed char.

2

Il est généralement une option pour le définir comme défaut, mais pas compilateur de ma connaissance fait ça.

+2

Il y a. Dans MSVC vous utilisez ['/ J' (Type de caractères par défaut est unsigned)] (https://msdn.microsoft.com/en-us/library/0d294k5z.aspx). Dans GCC, vous utilisez ['-funsigned-char'] (http://stackoverflow.com/a/20518559/995714) –

4

La norme exige que la valeur entière de tous les caractères requis par la norme (AZ, az, 0-9, ponctuation de base, etc.) soit positive, donc tout système utilisant un codage dont les valeurs sont en dehors du plage de signed chardoit avoir char être non signé. Je crois que cela signifie que tous les systèmes EBCDIC doivent avoir un char qui n'est pas signé, mais je peux me tromper.

+4

Si' CHAR_BIT'> 8 la plage de valeurs de 'char' est supérieure à -128..127 ou 0..255. Ainsi, sur un système EBCDIC avec CHAR_BIT == 9, un simple 'char' peut être signé. – pmg