Aviso do compilador (nível 1) C4312
'operation': conversão de 'type1' em 'type2' de tamanho maior
Este aviso detecta uma tentativa de atribuir um valor de 32 bits a um tipo de ponteiro de 64 bits, por exemplo, convertendo um ponteiro de 32 bits int
ou long
em um ponteiro de 64 bits.
Isso pode ser uma conversão não segura mesmo para valores de ponteiro que se ajustam em 32 bits quando ocorre a extensão de sinal. Se um inteiro negativo de 32 bits for atribuído a um tipo de ponteiro de 64 bits, a extensão de sinal fará com que o valor do ponteiro faça referência a um endereço de memória diferente do valor do inteiro.
Esse aviso só é emitido para destinos de compilação de 64 bits. Para obter mais informações, confira Regras para usar ponteiros.
O seguinte exemplo de código gera o erro C4312 quando ele é compilado para destinos de 64 bits:
// C4312.cpp
// compile by using: cl /W1 /LD C4312.cpp
void* f(int i) {
return (void*)i; // C4312 for 64-bit targets
}
void* f2(__int64 i) {
return (void*)i; // OK
}