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
}