usar tipos lenguaje leer imprimir funciones ejemplos datos como caracteres cadenas cadena arreglo c gcc standards char unsigned

tipos - leer cadena de caracteres en c



¿Por qué el signo de char no está definido en C? (5)

El estándar C establece:

ISO / CEI 9899: 1999, 6.2.5.15 (p.49)

Los tres tipos char, signed char y unsigned char se denominan colectivamente tipos de caracteres. La implementación definirá char para tener el mismo rango, representación y comportamiento que el char firmado o el char sin signo.

Y de hecho, gcc define eso según la plataforma objetivo.

Mi pregunta es, ¿por qué el estándar hace eso? No puedo ver nada que pueda salir de una definición de tipo ambigua, excepto por errores horribles y difíciles de detectar.

Más que eso, en ANSI C (antes de C99), el único tipo de tamaño de byte es char, por lo que usar char para matemáticas a veces es inevitable. Así que decir "uno nunca debería usar char para matemáticas" no es tan cierto. Si ese fuera el caso, una decisión más ubyte sbyte incluir tres tipos " char , ubyte , sbyte ".

¿Hay alguna razón para eso, o se trata simplemente de una extraña compatibilidad con versiones anteriores, para permitir que los compiladores malos (pero comunes) se definan como compatibles?


El carácter "sencillo" con signatura no especificada permite a los compiladores seleccionar la representación que sea más eficiente para la arquitectura de destino: en algunas arquitecturas, cero extendiendo un valor de un byte al tamaño de "int" requiere menos operaciones (lo que hace simple unsigned ''), mientras que en otros el conjunto de instrucciones hace que la extensión del signo sea más natural, y el carácter simple se implementa como firmado.


En algunas máquinas, un carácter firmado sería demasiado pequeño para contener todos los caracteres del conjunto de caracteres C (letras, dígitos, puntuación estándar, etc.) En tales máquinas, ''char'' no debe estar firmado. En otras máquinas, un char sin signo puede contener valores mayores que un int firmado (ya que char e int son del mismo tamaño). En esas máquinas, ''char'' debe estar firmado.


Supongo (fuera de mi cabeza) que su pensamiento estaba en las siguientes líneas:

Si le interesa el signo de char (usándolo como byte), debe elegir explícitamente char firmado o sin signo.


Tal vez, históricamente, se hayan firmado algunas "implementaciones" "char" y algunas no estén firmadas, por lo que para ser compatibles con ambas no podrían definirse como una u otra.


en esos buenos viejos tiempos se definía C, el mundo de los personajes era de 7 bits, por lo que el bit de signo podía usarse para otras cosas (como EOF)