Share via


Upozornění kompilátoru (úroveň 1) C4312

'operation': převod z 'type1' na 'type2' větší velikosti

Toto upozornění zjistí pokus o přiřazení 32bitové hodnoty k 64bitovému typu ukazatele, například přetypování 32bitového int nebo long 64bitového ukazatele.

Může to být nebezpečný převod i pro hodnoty ukazatele, které se vejdou do 32 bitů, když dojde k rozšíření znaménka. Pokud je k 64bitovému typu ukazatele přiřazené záporné 32bitové celé číslo, rozšíření znaménka způsobí, že hodnota ukazatele odkazuje na adresu paměti, která se liší od hodnoty celého čísla.

Toto upozornění se vydává pouze pro 64bitové cíle kompilace. Další informace naleznete v tématu Pravidla pro použití ukazatelů.

Následující příklad kódu generuje C4312 při kompilaci pro 64bitové cíle:

// 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
}