警告 C4018:">=":VSC++ 2010 中的有符号/无符号不匹配
warning C4018: '>=' : signed/unsigned mismatch in VSC++ 2010
我正在学习C++但是当我想运行我的代码时遇到了一些问题......
int __cdecl Voter___Vote(Voter *_this, CPlayer *pOne, char *pdata){
CPlayer *pPlayer=(CPlayer *)pOne;
CPvpOrderView * Pvp=GetPvpOrderViewV(pPlayer);
char tmp1[255];
char tmp2[255];
char tmp3[255];
char tmp4[255];
itoa(pPlayer->m_Param.m_dbChar.m_byLevel,tmp1,10);
sprintf(tmp2, "%Lf", Pvp->m_dPvpPoint>=PvpPoint);
sprintf(tmp3, "%Lf", Pvp->m_dPvpPoint>=PvpCash);
itoa(pOne->m_pUserDB->m_AvatorData.dbAvator.m_dwTotalPlayMin>=TotalPlayMin,tmp4,10);
MessageBoxA(NULL,tmp2 ,tmp3,MB_OK);
if(pPlayer->m_Param.m_dbChar.m_byLevel>=Lvl&&Pvp->m_dPvpPoint>=PvpPoint&&Pvp->m_dPvpCash>=PvpCash&&
pOne->m_pUserDB->m_AvatorData.dbAvator.m_dwTotalPlayMin>=TotalPlayMin)
{return p_Vote(_this,pOne,pdata);}
return 10;
}
我有一些这样的错误
Vote.cpp
Vote.cpp(42): warning C4018: '>=' : signed/unsigned mismatch
Vote.cpp(45): warning C4018: '>=' : signed/unsigned mismatch
比较有符号/无符号是危险的。非常直观地你会发现,小的有符号值比无符号值大:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = -11;
unsigned int b = 42;
if ( a < b ) {
printf("a<bn");
}
else
{
printf("a>=bn");
}
}
这将打印出来:
a>=b
警告表示您正在比较的变量的符号不同。
要解决此问题,您可以将无符号变量强制转换为有符号类型:
itoa(static_cast<signed>(pOne->m_pUserDB->m_AvatorData.dbAvator.m_dwTotalPlayMin)>=TotalPlayMin,tmp4,10);
我假设m_dw*
变量是DWORD
的,这意味着它们是 32 位无符号整数。
您还可以将有符号变量强制转换为无符号类型:
itoa(pOne->m_pUserDB->m_AvatorData.dbAvator.m_dwTotalPlayMin>=static_cast<unsigned>(TotalPlayMin),tmp4,10);
这也很好用,但这取决于您是否知道TotalPlayMin
总是一个正数。
编辑:请注意,我实际上不确定我是否得到了正确的行,因为我在您的代码中看不到行号,并且那里也有很多>= 比较。
相关文章:
- 为什么 std::(i)ostream 将有符号/无符号字符视为文本而不是整数
- 警告 C4018:">=":VSC++ 2010 中的有符号/无符号不匹配
- 有符号/无符号不匹配,并且函数在转换为函数时不带2个参数
- 符号"重新声明(有符号/无符号,精度)与
- 有符号/无符号特征编程
- 有符号/无符号 int 不匹配
- 断言(true)警告有符号/无符号不匹配
- 有符号/无符号比较警告是什么意思
- 数组索引的类型:有符号/无符号整数先锋
- 没有兼容的方法来转换相同大小的有符号/无符号
- 溢出的有符号/无符号赋值及其结果
- C++隐式转换(有符号 + 无符号)
- 增强size_type的有符号/无符号比较和multi_array的索引
- 警告 C4018:'>':有符号/无符号不匹配
- c++自动重写有符号/无符号
- C++警告 C4018:"<":有符号/无符号不匹配
- 错误:comp. bet.有符号/无符号整数表达式
- gcc和有符号/无符号比较的奇怪警告行为
- Visual Studio 2013有符号/无符号整数数学行为不同时,求值表达式作为函数参数,编译器切换
- 整数提升,有符号/无符号,和打印