Hoy hice una versión de 64 bits de mi proyecto por primera vez. Básicamente se compiló, enlazó y ejecutó correctamente, excepto por las advertencias que se quejaban de la incompatibilidad entre el nuevo tipo 64 bit size_t y el tipo int simple. Esto ocurre sobre todo en situaciones como esta en mi código:¿Cómo evitar problemas con los tipos size_t e int en compilaciones de 64 bits en C++?
void func(std::vector<Something> &vec)
{
int n = vec.size();
for (int i=0; i < n; i++)
{
....vec[i]....
}
}
Esto es bastante fácil de solucionar, y leí un artículo que decía que uno debe utilizar en lugar size_t o ptrdif_t como índices de bucle. Pero, ¿qué puedo hacer en una situación como esta?
void outsideLibraryFunc(int n);
void func(std::vector<Something> &vec)
{
int n = vec.size();
outsideLibraryFunc(n);
}
que no puedo cambiar declaración de la función de la biblioteca fuera, que espera un argumento de tipo int, y tengo que pasar el número de los elementos del vector. ¿Qué puedo hacer aparte de deshabilitar las advertencias del compilador?
+1 en Q: no sabía que size_t! = Unsigned int – pm100
@ pm100 It * can * be, y en la mayoría de los sistemas de 32 bits sí lo es, pero no tiene que ser así. En particular, en sistemas de 64 bits que utilizan las convenciones LP64 o LLP64 (la mayoría de los sistemas modernos de 64 bits), tiende a ser más grande que un 'unsigned int'. –
ssize_t a veces está disponible para un tamaño firmado_t – user318904