cortos int literales en C

¿Por qué no hay literales int cortos en ‘C’?

No tiene sentido tener un int int corto en C ya que todas las expresiones de enteros se evalúan como si las subexpresiones fueran al menos int de tamaño.

Alternativamente: ¡Porque no son necesarios!

Se necesitan tipos de datos de varios tamaños para adaptarse bien al hardware subyacente y / o para economizar espacio de almacenamiento, pero los literales son una construcción en tiempo de comstackción que se almacena en estructuras de datos apropiadas de todos modos.

Es diferente con float vs. double porque el mismo número en realidad tiene una representación interna diferente en ellos, más diferente, de todos modos, que solo unos pocos ceros a la izquierda.

De manera similar, hay una diferencia entre char y short , aunque pueden estar almacenados en los mismos bits: si el progtwigdor está hablando de datos de caracteres, generalmente será más conveniente para él especificar, digamos, 'A' que 65 .

Pero un 99 corto y un 99 int tienen el mismo aspecto que el progtwigdor, se tratan igual en el progtwig … el tipo de rango más amplio hará fácilmente el trabajo de ambos.

Si hablamos del diseño del idioma original , recuerde que C obtuvo la mayor parte de su forma actual en la CPU PDP-11, que es de 16 bits. Así que tenían enteros para aritmética y caracteres para almacenamiento de cadenas. Los punteros eran básicamente los mismos que los enteros.

El lenguaje era muy pragmático y solo más tarde obtuvo una syntax más formal e intrincada. Así que la respuesta es, simplemente resultó ser así. Mucho más tarde obtuvimos CPU de 32 y 64 bits y la necesidad de distinguir entre enteros de diferentes longitudes.

A día de hoy codifico casi todos mis progtwigs de C como si no hubiera otro tipo que no sea char y integer. Por cierto, “char” en C puede estar firmado y sin firmar de acuerdo con la norma. Esto refleja que los caracteres se utilizaron para el almacenamiento de caracteres (cadenas) y los ints para la aritmética.

Para aclarar, (gracias semaj) el comstackdor puede elegir tratar una variable declarada “char” como “unsigned char”. Esto no sucede para un “int”. Una “int” siempre está firmada, pero con caracteres no puede estar seguro. Tienes que asumir que un personaje puede tener aritmética sin firmar o firmada. Esta es una optimización de la velocidad para adaptarse a las CPU que funcionan más rápido con cualquier implementación. Es decir, el enfoque se coloca en los caracteres como contenedores de almacenamiento, no como un tipo aritmético. (Su nombre también es un regalo). Podría haber sido llamado “corto” o “pequeño”, pero fue llamado “char” por una razón.