1

最佳实践是在声明时初始化变量。

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

在调试模式下,这样的语句 int vStatus = OK;在 DEBUG MODE 构建期间不会引起任何问题。

在 RELEASE MODE 中构建时相同,会发出警告:

w8004:“vStatus”被分配了一个从未使用过的值。

另外,我在同一个函数的代码中使用同一个变量,就像这样 if(!vStatus),我还返回了return(vStatus);

当我在网上查看有关此调试 Vs Release 的指针时,编译器希望您在声明变量时对其进行初始化。

我正在使用带有 Windows 2003 服务器的 Borland developer studio 6。

任何指示都将帮助我理解这个问题。

谢谢

拉吉

4

2 回答 2

3

您将 vStatus 初始化为 OK,然后立即分配一个新值。

而不是这样做,您应该使用您将要使用的值来初始化 vStatus。

请尝试执行以下操作:

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

编辑:一些澄清。

初始化一个变量,只是从不使用该值,然后为该变量分配另一个值是低效的。在你的情况下,你只是使用 int's 这并不是一个真正的问题。但是,如果为您的类型创建/复制/分配的开销很大,那么开销可能会消耗性能,尤其是如果您经常这样做。

基本上,编译器试图帮助您指出程序中可以改进代码的区域

于 2009-09-09T13:35:57.850 回答
0

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

于 2009-09-09T15:47:48.893 回答