1. Compiler Warning(level 1) C4482: nonstandard extension used: enum 'enum' used in qualified name.当在一个类型中指定了枚举类型时,你指定变量名称的时候不需要加枚举名。
if(rythtoken->getKeyType()==KEYLENGHTYPE::RYTH_LONG)
// warning C4482: 使用了非标准扩展: 限定名中使用了枚举“KEYLENGHTYPE” e:\engeneer\x51_8118\code\x51editor\chuyinmode\editor\TokenRyth.h 48 docktest
{
CTokenRythEx*rythtokenex=(CTokenRythEx*)token;
if(rythtokenex->getRythExType()==RYTHEXTYPE::RYTH_MIDDLE || rythtokenex->getRythExType()==RYTHEXTYPE::RYTH_END)
{
++it;
continue;
}
}
2. Compiler Warning(level 1) C4237:'keyword'keyword is not yet supported, but reserved for future use。
比如:void Camera::export(TiXmlElement* node)
{
mCameraAni->export(node);
} // warning C4237: 目前还不支持“export”关键字,但已保留该关键字供将来使用e:\engeneer\x51_8118\code\x51editor\chuyinmode\camera\Camera.h 82 docktest
将export改成别的名称即可。
3. Compiler Warning (level 1) C4005:'identifier' :macro redefinition
The macro identifier is defined twice. The compiler uses the secondmacro definition.
比如:
#define M_PI 3.14159265358979323846 // 警告 3 warning C4005: “M_PI”: 宏重定义
1>d:\software\MicrosoftVisual Studio 2008 Teamsuit\file\VC\include\math.h(626) : warning C4005:“M_PI”: 宏重定义
1> d:\software\qt\file1\include\qtcore\../../src/corelib/kernel/qmath.h(261): 参见“M_PI”的前一个定义
将其中一个M_PI改为M_PI2即可
4.“未找到下列环境变量”:
比如:警告 104 未找到下列环境变量:
$(Configuration) 项目 docktest
当配置里用到某个环境变量而无法找到,可以将用到的环境变量修改名称。
5. warning C4244: conversion' conversion from 'type1' to 'type2', possible loss of data.
比如把int类型转换为short类型属于4级警告类型;
而把__int64转换成unsigned int属于3级警告类型。
比如下面:
typedef std::pair<Point,float> PointData;
std::vector<PointData> points_data;
points_data.push_back(std::make_pair(points[0].main_point,0));
//警告 warning C4244: “初始化”: 从“const int”转换到“float”,可能丢失数据
.\Curve\CurveManager.cpp(86): 参见对正在编译的函数模板实例化“std::pair<_Ty1,_Ty2>::pair<CurveLib::Point,int>(conststd::pair<_Ty1,int> &)”的引用
with
[
_Ty1=CurveLib::Point,
_Ty2=float
]
这里std::make_pair在推导类型的时候会认为类型是std::pair<Point, int>,和PointData类型不一样。所以,改成points_data.push_back(PointData(points[0].main_point,0));
或points_data.push_back(std::make_pair(points[0].main_point,0.f));即可
将0改为0.f即可。
6. warning LNK4068: 未指定 /MACHINE;默认设置为 X86 :
解决方法:链接器 -> 命令行 -> 附加选项, 添加/MACHINE:x86
7.C4099
structCurve
{
…
}
friend class Curve;
//警告 1 warning C4099: “CurveLib::Curve”: 类型名称以前使用“class”现在使用的是“struct” e:\engeneer\x51_8118\code\x51editor\chuyinmode\curve\CurveManager.h 41 docktest
解决方案:将friend class Curve改成friend struct Curve即可。
8.C4244
CameraAnimation(int mMode, floatstartTime = 0.0f, float endTime = 1.0f)
floatmStartTime ; float mEndTime ; int mMode;
CameraAnimation*pCopy = new CameraAnimation(mStartTime,mEndTime, mMode);
// 1>.\camera\CameraAnimation.cpp(204) : warning C4244: “参数”: 从“int”转换到“float”,可能丢失数据
//warning C4244: “参数”: 从“float”转换到“int”,可能丢失数据
解决方案:将CameraAnimation* pCopy = newCameraAnimation(mStartTime, mEndTime, mMode);改成
CameraAnimation* pCopy = new CameraAnimation(static_cast<int>(mStartTime), mEndTime, static_cast<float>(mMode));即可。
10.C4305:
if(mFov < 0.01)
mFov= 0.01;
//.\camera\Camera.cpp(421): warning C4305: “=”: 从“double”到“float”截断
解决方案:mFov=0.01;改成mFov=0.01f即可。
8.C4127
while(TRUE)
{
…
}//警告 1 warningC4127: 条件表达式是常量
e:\engeneer\x51_8118\Code\X51Editor\ChuyinMode\dump\debug.cpp 75 docktest
9.C4100
DWORD WINAPI ReportFunc(LPVOIDThreadParam)
{
generate_dump(g_ExceptionInfo);
return 0;
}//警告 2 warningC4100: “ThreadParam”: 未引用的形参 e:\engeneer\x51_8118\Code\X51Editor\ChuyinMode\dump\debug.cpp 106 docktest
10.C4245
WINBASEAPI
DECLSPEC_NORETURN
VOID
WINAPI
ExitProcess(
__in UINT uExitCode
);
int __cdecl NewHandler(size_t)
{
// 'new' operator memory allocation exception
generate_dump(GetExceptionPointers());
ExitProcess(-1);
}//警告 11 warningC4245: “参数”: 从“int”转换到“UINT”,有符号/无符号不匹配 e:\engeneer\x51_8118\Code\X51Editor\ChuyinMode\dump\debug.cpp 198 docktest
11.C4189
DWORD error = GetLastError(); //警告 22 warning C4189: “error”: 局部变量已初始化但不引用 e:\engeneer\x51_8118\Code\X51Editor\ChuyinMode\dump\debug.cpp 471 docktest
二级warning
1.C4099
structCurve
{
…
}
friend class Curve;
//警告 1 warning C4099: “CurveLib::Curve”: 类型名称以前使用“class”现在使用的是“struct” e:\engeneer\x51_8118\code\x51editor\chuyinmode\curve\CurveManager.h 41 docktest
解决方案:将friend class Curve改成friend struct Curve即可。
2.C4244
CameraAnimation(int mMode, floatstartTime = 0.0f, float endTime = 1.0f)
floatmStartTime ; float mEndTime ; int mMode;
CameraAnimation*pCopy = new CameraAnimation(mStartTime,mEndTime, mMode);
// 1>.\camera\CameraAnimation.cpp(204) : warning C4244: “参数”: 从“int”转换到“float”,可能丢失数据
//warning C4244: “参数”: 从“float”转换到“int”,可能丢失数据
解决方案:将CameraAnimation* pCopy= new CameraAnimation(mStartTime, mEndTime, mMode);改成
CameraAnimation*pCopy = new CameraAnimation(static_cast<int>(mStartTime), mEndTime,static_cast<float>(mMode));即可。
3.C4305:
if (mFov < 0.01)
mFov = 0.01;
//.\camera\Camera.cpp(421): warning C4305: “=”: 从“double”到“float”截断
解决方案:mFov=0.01;改成mFov=0.01f即可。
三级warning
1. C4018
int index;
if(index < 0 ||index >= mKeyPoints.size())
return 0;
//警告 1 warning C4018: “>=”: 有符号/无符号不匹配 e:\engeneer\x51_8118\Code\X51Editor\ChuyinMode\camera\CameraAnimation.cpp 22 docktest
解决方案:将int index;改成unsigned int index;即可。
2. C4244
void CameraAnimation::createKeyPoint(float timePos,H3DVec3 translate, H3DQuat rotate, float fov)
createKeyPoint(atof(pKeyPoint->Attribute(tok_Time)),
H3DVec3(translate[0],translate[1], translate[2]), H3DQuat(rotate[0], rotate[1], rotate[2],rotate[3]),
atof(pKeyPoint->Attribute("Fov")));
//警告 1 warningC4244: “参数”: 从“double”转换到“float”,可能丢失数据 e:\engeneer\x51_8118\Code\X51Editor\ChuyinMode\camera\CameraAnimation.cpp 257 docktest
解决方案:用sscanf代替atof,即改成
sscanf(pKeyPoint->Attribute(tok_translate),"%f,%f,%f", translate, translate+1, translate+2 );
sscanf(pKeyPoint->Attribute(tok_rotate),"%f,%f,%f,%f", rotate, rotate+1, rotate+2, rotate+3 );
float fox = 0.f;
sscanf(pKeyPoint->Attribute("Fov"),"%f", fox);
float tokTime = 0.f;
sscanf(pKeyPoint->Attribute(tok_Time),"%f", tokTime);
createKeyPoint(tokTime,
H3DVec3(translate[0], translate[1],translate[2]), H3DQuat(rotate[0], rotate[1], rotate[2], rotate[3]),
fox);即可
3.C4996
strlwr(a);
//警告 3 warningC4996: 'strlwr': The POSIX name for this item is deprecated. Instead, use theISO C++ conformant name: _strlwr. See online help for details. e:\engeneer\x51_8118\Code\X51Editor\ChuyinMode\editor\DanceLevelEditor.cpp 1672 docktest
解决方案:将strlwr(a);改成_strlwr(a);即可。
四级warning
1. C4127
while(TRUE)
{
if(FindFileData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
{
}
else
{
if(CompareFileTime(&latest,&FindFileData.ftLastWriteTime) < 0)
{
latest =FindFileData.ftLastWriteTime;
strcpy(lpPath, szFindPath);
strcat(lpPath,FindFileData.cFileName);
}
}
if(!FindNextFileA(hFind,&FindFileData))
{
break;
}
}
//警告 1 warning C4127: 条件表达式是常量 e:\engeneer\x51_8118\Code\X51Editor\DanceEditor\dump\debug.cpp 70 docktest
解决方案:将上述代码改成:
do
{
if(FindFileData.dwFileAttributes &FILE_ATTRIBUTE_DIRECTORY)
{
}
else
{
if(CompareFileTime(&latest,&FindFileData.ftLastWriteTime) < 0)
{
latest =FindFileData.ftLastWriteTime;
strcpy(lpPath, szFindPath);
strcat(lpPath,FindFileData.cFileName);
}
}
}while(FindNextFileA(hFind,&FindFileData));
或将while(True)改为for(;;)
2. C4100
DWORD WINAPIReportFunc(LPVOID ThreadParam)
{
generate_dump(g_ExceptionInfo);
return 0;
}
//警告 2 warningC4100: “ThreadParam”: 未引用的形参 e:\engeneer\x51_8118\Code\X51Editor\DanceEditor\dump\debug.cpp 101 docktest
解决方案:在函数中添加“ThreadParam;”或在去掉该形参而不出错的情况下,可以直接去掉该形参即可。
3.C4245
void __cdeclTerminateHandler()
{
// Abnormal program termination(terminate() function was called)
generate_dump(GetExceptionPointers());
ExitProcess(-1);
}
//警告 3 warningC4245: “参数”: 从“int”转换到“UINT”,有符号/无符号不匹配 e:\engeneer\x51_8118\Code\X51Editor\DanceEditor\dump\debug.cpp 137 docktest
解决方案:将ExitProcess(-1);改成ExitProcess(1);即可。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx
4.C4189
DWORD error =GetLastError();
//警告 22 warningC4189: “error”: 局部变量已初始化但不引用 e:\engeneer\x51_8118\Code\X51Editor\DanceEditor\dump\debug.cpp 466 docktest
解决方案:将未引用的局部变量去掉即可。
5.C4244
*tag += in->get();
//警告 25 warning C4244: “参数”: 从“int”转换到“char”,可能丢失数据 e:\engeneer\x51_8118\Code\X51Editor\DanceEditor\xml\tinyxmlparser.cpp 68 docktest
解决方案:将*tag += in->get();改成
int x = in->get();
char *str = “”;
_itoa(x, str, 10);
(*tag) += str;
6.C4189
int r =invMat.InverseSelf();
assert( r );
//警告 36 warning C4189: “r”:局部变量已初始化但不引用 e:\engeneer\x51_8118\code\engine\external\dmath\math\matrix.h 288 docktest
解决方案:改成assert(invMat.InverseSelf() );
7.C4714
voidconstruct(pointer _Ptr, const _Ty& _Val)
{ //construct object at _Ptr with value _Val
_Construct(_Ptr, _Val);
}
//警告 63 warning C4714: 标记为 __forceinline 的函数“H3DVecX H3DVecX::operator *(const float) const”未内联 d:\software\MicrosoftVisual Studio 2008 Teamsuit\file\VC\include\xmemory 154 docktest
解决方案:
8.C4702
{
Camera* cam = new Camera(name,pRender);
cameraList->push_back(cam);
return cam;
}
return 0;
//警告 259 warning C4702: 无法访问的代码 e:\engeneer\x51_8118\code\x51editor\danceeditor\camera\cameramanager.cpp 34 docktest
解决方案:去掉无法执行的return 0;即可
9. C4244
byte *dest = (byte*)dest0;
int count = count0;
while( count > 0 && (((int)dest)& 7) ) {
*dest = val;
dest++;
count--;
}
//警告 273 warning C4244: “=”: 从“const int”转换到“byte”,可能丢失数据 e:\engeneer\x51_8118\Code\Engine\External\dmath\math\Simd_MMX.cpp 258 docktest
解决方案:将*dest = val;改成*dest = (byte) (0xff & val);
10.C4239
DrawRect(p,rect,QColor(255,128,255),0,0);
voidDrawRect(tPainterParam* p,QRect& rect,QColor& col,int lineWid,int type)
//警告 488 warning C4239: 使用了非标准扩展 : “参数”: 从“QColor”转换到“QColor&” e:\engeneer\x51_8118\Code\X51Editor\DanceEditor\editor\UITrack.cpp 104 docktest
解决方案:将DrawRect(p,rect,QColor(255,128,255),0,0)改成
QColorcolor(255,128,255);
DrawRect(p,rect,color,0,0);即可。
11.C4701
Quat qu;
if (mat[W][W] !=1.0f) qu = Qt_Scale(qu, 1/sqrt(mat[W][W]));
//警告 540 warning C4701: 使用了可能未初始化的局部变量“qu” e:\engeneer\x51_8118\code\engine\external\dmath\decompose.cpp 136 docktest
解决方案:将Quat qu改成Quat qu = {0, 0, 0, 0};即可。
12.C4512
class QLatin1Literal
{
public:
int size() const { return m_size; }
const char *data() const { return m_data; }
template <int N>
QLatin1Literal(const char (&str)[N])
: m_size(N - 1), m_data(str) {}
private:
const int m_size;
const char * const m_data;
};
//警告 42 warning C4512: “QLatin1Literal”: 未能生成赋值运算符 d:\software\qt\file1\src\corelib\tools\qstringbuilder.h 76 docktest
解决方案:增加QLatin1Literal & operator=(const QLatin1Literal & ) { return *this; }即可。