简体   繁体   中英

w8004 compiler warning BDS6 c/c++

It is a best practise to initialise a variable at the time of declaration.

int TMyClass::GetValue()
{
    int vStatus = OK;
    // A function returns a value
    vStatus = DoSomeThingAndReturnErrorCode();
    if(!vStatus)
        //Do something
    else
       return(vStatus);
}

In the debug mode, a statement like this int vStatus = OK; is causing no issues during DEBUG MODE build.

The same when build in RELEASE MODE, throws a warning saying:

w8004: 'vStatus' is assigned a value that is never used.

Also, i am using the same variable further down my code with in the same function,like this if(!vStatus) and also I return the value of return(vStatus);

When I looked at the web for pointers on this debug Vs Release , compilers expect you to initialise your variable at the time of declaring it.

I am using Borland developer studio 6 with windows 2003 server.

Any pointers will help me to understand this issue.

Thanks

Raj

You initialise vStatus to OK, then you immediately assign a new value.

Instead of doing that you should initalise vStatus with a value that you're going to use.

Try doing the following instead:

int TMyClass::GetValue()
{
    // A function returns a value
    int vStatus = DoSomeThingAndReturnErrorCode();
    if(!vStatus)
        //Do something
    else
       return(vStatus);
}

Edit: Some clarification.

Initialising a variable, only to never use that value, and then to assign another value to the variable is inefficient. In your case, where you're just using int's it's not really a problem. However, if there's a large overhead in creating / copying / assignment for your types then the overhead can be a performance drain, especially if you do it a lot.

Basically, the compiler is trying to help you out and point out areas in your program where improvements can be made to your code

如果您想知道为什么在调试模式下没有警告,那是因为执行数据流分析的过程(发现问题的原因)仅作为优化的一部分运行。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM