컴파일러 경고(수준 2) C4826
업데이트: 2007년 11월
오류 메시지
'type1'에서 'type_2'(으)로의 변환이 부호 확장되었습니다. 예기치 않은 동작이 발생할 수 있습니다.
Conversion from 'type1 ' to 'type_2' is sign-extended. This may cause unexpected runtime behavior.
이 경고는 32비트 포인터가 64비트 변수로 캐스팅될 때 컴파일러에서 부호 확장을 수행했음을 나타냅니다.
windows 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;
}