Advertencia del compilador (niveles 3 y 4) C4244
'conversion': conversión de 'type1' a 'type2', posible pérdida de datos
Un tipo de entero se convierte en un tipo de entero más pequeño.
- Se trata de una advertencia de nivel 4 si type1 es un signo o unsigned
int
y type2 es un valor más pequeño, como un signo o unsignedshort
. - Se trata de una advertencia de nivel 3 si se asigna un valor de tipo
__int64
ounsigned __int64
a un signo o sinint
signo. Es posible que se haya producido una posible pérdida de datos debido a una conversión de restricción, lo que podría provocar resultados inesperados.
Para corregir esta advertencia, cambie el programa para usar tipos compatibles o agregue lógica que garantice que el intervalo de valores posibles sea compatible con los tipos que usa. Si la conversión está pensada, use una conversión explícita para silenciar la advertencia.
C4244 también puede aparecer cuando el nivel de advertencia es 2. Para obtener más información, vea Advertencia del compilador (nivel 2) C4244.
El siguiente ejemplo genera C4244:
// C4244_level4.cpp
// compile with: /W4
void test(unsigned short num) {}
int main() {
int int1 = 1;
unsigned int uint1 = 2;
short short1 = int1; // C4244
short short2 = (short)int1; // warning silenced - explicit cast
short short3 = uint1; // C4244
unsigned short ushort = uint1; // C4244
test(uint1); // C4244
}
Para obtener más información, vea Conversiones aritméticas usuales.
Para obtener más información sobre cómo establecer el nivel de advertencia en Visual Studio, vea Para establecer las opciones del compilador en el entorno de desarrollo de Visual Studio.
// C4244_level3.cpp
// compile with: /W3
int main() {
__int64 i64 = 1;
unsigned __int64 u64 = 2;
int int1 = i64; // C4244
int int3 = u64; // C4244
}
Advertencia C4244 puede producirse al compilar código para destinos de 64 bits que no generan la advertencia al compilar destinos de 32 bits. Por ejemplo, la aritmética de puntero da como resultado una cantidad de 32 bits en plataformas de 32 bits, pero una cantidad de 64 bits en plataformas de 64 bits.
En el ejemplo siguiente se genera C4244 cuando se compila para destinos de 64 bits:
// C4244_level3_b.cpp
// compile with: /W3
int main() {
char* p1 = 0;
char* p2 = 0;
int x = p2 - p1; // C4244
}
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de