Поделиться через


Предупреждение компилятора (уровень 2) C4826

Преобразование из "типа1" в "тип2" выполняется с расширением знака.Это может привести к непредсказуемому поведению во время выполнения.

Предупреждение указывает, что во время преобразования 32-разрядного указателя в 64-разрядное значение компилятор выполнил знаковое расширение.

Если расширение было выполнено для оконного типа HANDLE, можно проигнорировать это предупреждение. Если преобразование выполняется для указателя, следует модифицировать тип преобразования, чтобы исключить знаковое расширение (см. приведенные ниже примеры).

Предупреждение C4826 по умолчанию отключено. Дополнительные сведения см. в разделе Compiler Warnings That Are Off by Default.

Пример

Следующий пример приводит к возникновению предупреждения C4826.

// C4826.cpp
// compile with: /W2 /c
#include <windows.h>
#pragma warning(default: 4826)

void * __ptr64 F1 (void * __ptr32 P ) {
   return (void * __ptr64)P;   // C4826
   // try the following line instead
   // return (void * __ptr64)(ULONGLONG)(ULONG)P;
}

void * __ptr64 F2 ( void * P ) {
   return (void * __ptr64)P;   // C4826
   // try the following line instead
   // return (void * __ptr64)(ULONGLONG)(ULONG)P;
}

unsigned __int64 F3r ( void * P ) {
   return (unsigned __int64)P;   // C4826
   // try the following line instead
   // return (unsigned __int64)(ULONGLONG)(ULONG)P;
}