0

次のコードスニペットがあります

fscanf( fSettings, "%s", szLine );  
bool x = separateBool   ( szLine );
gSettings.useBE = x;

szLineが含まれていますuseBE=1xに設定されtrue、VS2010 Pro ウォッチはそれを認識します。gSettings.useBEただし、最後の行でvalue が割り当てられた後でgSettings.useBEも、の値は false として表示されます。これがどのように起こっているのかわかりません。VS2010 SP1をインストール。ご意見をお寄せいただきありがとうございます。

VS 2010 を見る

編集:separateBoolは次の関数です:

  inline 
  bool separateBool( const char * szStr )   
  {
       std::vector<std::string> res = split(szStr, '=');
       if ( res.size() < 2 )
          ;  /* error */
       return (str2int( res[1] ) == 1 );        
  };

「アルゴリズム」の玩具版

bool a = false;
bool b = false;
b = separateBool    ( szLine );
a = b;
a = separateBool    ( szLine );

すべてを正しく行います。

4

2 に答える 2

0

プログラムは2回に割り当てgSettings.useBEます。したがって、2つの異なる値で表示されるため、アラームの理由はありません。

何をするのかわからないのでseparateBool、推測しなければなりません。

推測する必要がある場合は、のseparateBoolような署名bool *(char**)とこれらのセマンティクスがあります-文字列から1つのパラメータを読み取り、次のパラメータを指すように引数を更新します。

私の仮定が正しければ、結果は、2番目の呼び出しが、パラメーターを評価するパラメーターを検出するか、パラメーターを検出しfalseないか、またはseparateBoolを返す他の条件を検出することfalseです。

于 2012-11-21T23:52:35.067 に答える
0

Struct Member Alignmentinを元の8 バイトProperties->C/C++->CodeGenerationから4 バイトに変更すると、うまくいきます。しかし、私はまだ理由がわかりません...

于 2012-11-22T18:02:34.257 に答える