¿ANSI C define almacenamiento minimo para los tipos de datos predefinidos?

Iniciado por do-while, 5 Octubre 2010, 17:12 PM

0 Miembros y 1 Visitante están viendo este tema.

do-while

¡Buenas!

Nunnca he tenido en mis manos el texto de la especificicacion de C del comite ANSI que lo estandarizo (tampoco el ISO), pero tenia entendido (posiblemente de forma erronea) que existia la siguiente correspondencia:

char -> 1byte
short-> 2 bytes
long -> 4 bytes

Y sobre numeros de coma flotante... lo mismo, no tengo ni idea.

La cuestion esta en que acabo de empezar un modulo para sacarle rendimiento a lo que se sobre programacion, y en clase nos han dicho que el estandar no define ningun tipo de rango de valores para los tipos de datos predefinidos. Yo tenia entendido que aunque no existia una definicion de maximo para cada tipo de dato, si existia una cantidad minima de bytes establecida para cada tipo.

Lo unico que he encontrado es una referencia rapida de una sola oja, que se supone que es un resumen del ANSI, en la que se especifica que char, short y long deben tener 1, 2 y 4 bytes respectivamente.

¿Alguno sabeis exactamente cual es la verdad y cual la leyenda?

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Akai

Buscando en google "ANSI C Referenfe" encontré en la primera entrada (en la sección de variables) lo siguiente:

Type     Size     Range
unsigned char    8 bits    0 to 255
char    8 bits    -128 to 127
unsigned int    16 bits    0 to 65,535
short int    16 bits    -32,768 to 32,767
int    16 bits    -32,768 to 32,767
unsigned long    32 bits    0 to 4,294,967,295
long    32 bits    -2,147,483,648 to 2,147,483,647
float    32 bits    1.17549435 * (10^-38) to 3.40282347 * (10^+38)
double    64 bits    2.2250738585072014 * (10^-308) to 1.7976931348623157 * (10^+308)
long double    80 bits    3.4 * (10^-4932) to 1.1 * (10^4932)

En cualquier caso, si mal no tengo entendido, la longitud de algunos tipos puede variar dependiendo de la arquitectura del procesador.

do-while

¡Buenas!

Gracias. Me habia puesto a sumar conceptos en google en lugar de ir directamente a la refencia...  :silbar:

De todas formas, en ese texto dice que ese es el rango de valores mas comun para la mayor parte de las implementaciones, pero no dice que ese tenga que ser el rango en las implementaciones estandar. Por otra parte, menciona que short y long pueden tener, respectivamente, la mitad y el doble de almacenamiento que un entero normal, pero tambien dice que no tiene porque ser asi, y que pueden tener el mismo numero de bytes que un entero sin modificadores.

Otra pregunta. La pagina que me has indicado, no figura como el texto estandar oficial, sino que parece una recopilacion de otra persona. ¿Hasta que punto es fiable al informacion referente al almacenamiento de las variables?

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Akai

Estuve buscando algo más de información para contrastar, y según leí, el estandar es vago a propósito en cuanto al tamaño de las variables. Esto se debe a que según el procesador, el tamaño de estas varía.

Según el procesador, un entero puede ocupar 4 bytes (32 bits) o bien 8 bytes (64 bits). La única definición al respecto es que un float no sea mayor que un double y este a su vez menor que un long double.

http://en.wikipedia.org/wiki/C_variable_types_and_declarations

do-while

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!