编译器警告(等级 1)C4312
“operation”: 从“type1”转换到更大的“type2”
此警告检测将 32 位值分配给 64 位指针类型的尝试,例如,将 32 位 int
或 long
强制转换为 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
}
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈