2010-09-16 11 views

Respuesta

11

GCC does does. Pero solo cuando se compila para plataformas donde la convención es un char sin signo, incluido ARM linux [*]. Cuando GCC compila para x86, el valor predeterminado es para que se firme la char.

[*] O al menos lo ha sido en el pasado. Por lo que sé, Linux ha cambiado a un ABI predeterminado diferente en ARM desde entonces.

Actualización '2013: compiladores ARM (gcc, clang) para Android NDK por defecto a unsigned char. Los compiladores x86 y MIPS están predeterminados en signed char.

2

por lo general hay una opción para establecer como predeterminado, pero ningún compilador de mi conocimiento hace eso.

+2

Hay. En MSVC, utiliza ['/ J' (el tipo de carácter predeterminado no está firmado)] (https://msdn.microsoft.com/en-us/library/0d294k5z.aspx). En GCC, utiliza ['-funsigned-char'] (http://stackoverflow.com/a/20518559/995714) –

4

El estándar requiere que el valor entero de todos los caracteres requeridos por el estándar (AZ, az, 0-9, puntuación básica, etc.) sea positivo, por lo que cualquier sistema que use una codificación donde los valores de estos caracteres estén fuera del rango de signed chardebe tener cero char ser sin firmar. Creo que esto significa que todos los sistemas EBCDIC deben tener un simple char sin firma, pero puedo estar equivocado.

+4

Si' CHAR_BIT'> 8 el rango de valores para 'char' es mayor que -128..127 o 0..255. Entonces, en un sistema EBCDIC con CHAR_BIT == 9, se puede firmar un simple 'char'. – pmg

Cuestiones relacionadas