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óby przypisać do typu wskaźnik 64-bitowych, na przykład wartość 32-bitowy rzutowanie 32-bitowa int lub long na wskaźnik 64-bitowych.

Może to być niebezpieczny konwersji nawet dla wartości wskaźnika, które mieści się w 32 bity po wystąpieniu rozszerzenia logowania.Jeśli ujemne liczby całkowitej 32-bitowy jest przypisany do typu wskaźnik 64-bitowych, rozszerzenia logowania powoduje, że wartość wskaźnika celu odwołania się do adresu pamięci inna niż wartość całkowitą.

To ostrzeżenie jest wystawiane tylko dla celów kompilacji 64-bitowej.Aby uzyskać więcej informacji, zobacz zasady za pomocą wskaźników.

Poniższy przykładowy kod generuje C4312, gdy jest skompilowana dla celów 64-bitowe:

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