C++ warning

来源:互联网 发布:计算机技术与软件试题 编辑:程序博客网 时间:2024/05/16 06:49

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; }即可。

0 0
原创粉丝点击