Udostępnij za pośrednictwem


Ostrzeżenie kompilatora (poziom 1) C4312

'operacja' : konwersja z 'typ1' na 'typ2' o większym rozmiarze

To ostrzeżenie wykrywa próbę przypisania wartości 32-bitowej do 64-bitowego typu wskaźnika, na przykład rzutowania 32-bitowego int lub long do wskaźnika 64-bitowego.

Może to być niebezpieczna konwersja nawet dla wartości wskaźnika, które mieszczą się w 32 bitach po wystąpieniu rozszerzenia podpisywania. Jeśli ujemna liczba całkowita 32-bitowa jest przypisana do typu wskaźnika 64-bitowego, rozszerzenie znaku powoduje, że wartość wskaźnika odwołuje się do adresu pamięci innego niż wartość liczby całkowitej.

To ostrzeżenie jest wydawane tylko dla obiektów docelowych kompilacji 64-bitowej. Aby uzyskać więcej informacji, zobacz Reguły używania wskaźników.

Poniższy przykład kodu generuje kod C4312 podczas kompilowania dla obiektów docelowych 64-bitowych:

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