编译器警告(等级 1)C4312

“operation”: 从“type1”转换到更大的“type2”

此警告检测将 32 位值分配给 64 位指针类型的尝试,例如,将 32 位 intlong 强制转换为 64 位指针。

这可能是不安全的转换,即使对于在发生符号扩展时适应 32 位的指针值也是如此。 如果为 64 位指针类型分配负 32 位整数,则符号扩展会导致指针值引用的内存地址与整数的值不同。

仅对 64 位编译目标发出此警告。 有关详细信息,请参阅使用指针的规则

以下代码示例在其针对 64 位目标进行编译时将生成 C4312:

// 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
}