Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Compiler Warning (level 2) C4826
Collapse the table of content
Expand the table of content

Compiler Warning (level 2) C4826

Error Message

Conversion from 'type1 ' to 'type_2' is sign-extended. This may cause unexpected runtime behavior.

This warning indicates that the compiler performed sign extension when a 32-bit pointer was cast to a 64-bit variable.

If the extension was performed on a windows HANDLE type, it is safe to ignore this warning. If the extension was performed on a pointer type, you should modify the cast to prevent the sign extension (see example below). You can also prevent or permit the sign extension by declaring the pointer with the __sptr, __uptr modifier.

C4826 is off by default. See Compiler Warnings That Are Off by Default for more information.

Example

The following sample generates 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;
}

Community Additions

ADD
Show:
© 2015 Microsoft