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);

この debug Vs Release のポインターをWeb で調べたところ、コンパイラーは、宣言時に変数を初期化することを期待しています。

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 を使用しているだけの場合、実際には問題ありません。ただし、タイプの作成/コピー/割り当てに大きなオーバーヘッドがある場合、特に頻繁に行うと、オーバーヘッドがパフォーマンスの低下になる可能性があります。

基本的に、コンパイラは、コードを改善できるプログラム内の領域を指摘して支援しようとしています。

于 2009-09-09T13:35:57.850 に答える
0

デバッグ モードで警告が表示されない理由は、データフロー解析を実行するパス (問題を検出するパス) が最適化の一部としてのみ実行されるためです。

于 2009-09-09T15:47:48.893 に答える