Предупреждение компилятора (уровень 1) C4312
"операция": преобразование из "тип 1" в "тип 2" большего размера
Это предупреждение сообщает о попытке присвоить 32-разрядное значение 64-разрядному указателю, например при приведении 32-разрядного int
или long
к 64-разрядному указателю.
Это преобразование может быть небезопасным даже для значений указателей, которые помещаются в 32 бита, при расширении знака. Если отрицательное целое 32-разрядное число присваивается 64-разрядному указателю, расширение знака приводит к тому, что значение указателя ссылается на адрес в памяти, отличный от значения целого числа.
Это предупреждение возникает только для 64-разрядных целевых сред компиляции. Дополнительные сведения см. в разделе "Правила использования указателей".
В следующем примере кода возникает ошибка C4312 при компиляции для 64-разрядных сред.
// 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
}