que tienen el código:¿Por qué la conversión de un size_t a un int sin firmar me da una advertencia?
unsigned int length = strlen(somestring);
Estoy compilando con el nivel de advertencia en 4, y me dice que "la conversión de size_t
a unsigned int
, posible pérdida de datos" cuando un size_t
es un typedef
para una unsigned int
.
¿Por qué?
Editar:
simplemente he resuelto mi problema. Soy un usuario de XP y mi compilador comprobaba la compatibilidad de 64 bits. Como size_t
depende de la plataforma, para 64 bits sería unsigned long long
, donde no es lo mismo que unsigned int
.
Todos los tamaños son dependientes. 'size_t' no tiene que ser igual a ningún otro tipo, todos podrían ser diferentes. La única garantía que tienes es que 'sizeof (char) == 1', y que el número de bits en un' char' (¡que también es dependiente!) Se define en la macro 'CHAR_BIT' en el encabezado'', y que 'sizeof (short)> = sizeof (char)', 'sizeof (int)> = sizeof (long)', y 'sizeof (long long)> = sizeof (long)'. –
GManNickG
@GMan: en realidad creo 'sizeof (long)> = sizeof (int)' :) +1 aunque –
@Billy: Oh, dangit. Ahora es demasiado tarde para arreglarlo. -_- Oh bien. : 3 – GManNickG