¿El carácter está firmado o no firmado de forma predeterminada?

Resuelto C Learner asked hace 14 años • 6 respuestas

En el libro "Referencia completa de C" se menciona que, charpor defecto, no está firmado.

Pero estoy intentando verificar esto tanto con GCC como con Visual Studio. Lo toma como firmado por defecto.

¿Cuál es correcto?

C Learner avatar Jan 13 '10 13:01 C Learner
Aceptado

El libro está mal. La norma no especifica si el plano charestá firmado o no.

De hecho, la norma define tres tipos distintos: char, signed chary unsigned char. Si #include <limits.h>luego miras CHAR_MIN, puedes descubrir si simple chares signedo unsigned(si CHAR_MINes menor que 0 o igual a 0), pero aun así, los tres tipos son distintos en lo que respecta al estándar.

Tenga en cuenta que chares especial en este sentido. Si declara una variable como intes 100% equivalente a declararla como signed int. Esto siempre es cierto para todos los compiladores y arquitecturas.

Alok Singhal avatar Jan 13 '2010 06:01 Alok Singhal

Como señala Alok , el estándar deja eso en manos de la implementación.

Para gcc, el valor predeterminado está firmado, pero puedes modificarlo con -funsigned-char. nota: para gcc en Android NDK, el valor predeterminado es unsigned . También puedes solicitar explícitamente caracteres firmados con -fsigned-char.

En MSVC, el valor predeterminado está firmado, pero puede modificarlo con /J.

R Samuel Klatchko avatar Jan 13 '2010 06:01 R Samuel Klatchko

C99 N1256 borrador 6.2.5/15 "Tipos" tiene esto que decir sobre la firma del tipo char:

La implementación definirá char para que tenga el mismo rango, representación y comportamiento que el char firmado o el char sin firmar.

y en una nota a pie de página:

CHAR_MIN, definido en <limits.h>, tendrá uno de los valores 0o SCHAR_MIN, y esto puede usarse para distinguir las dos opciones. Independientemente de la elección realizada, chares un tipo independiente de los otros dos y no es compatible con ninguno de los dos.

Michael Burr avatar Jan 13 '2010 07:01 Michael Burr

Según el libro The C Programming Language de Dennis Ritchie, que es el libro estándar de facto para ANSI C, los caracteres simples, ya sean firmados o sin firmar, dependen de la máquina, pero los caracteres imprimibles siempre son positivos.

Ravi Rathi avatar Jul 31 '2012 08:07 Ravi Rathi