0

我有以下代码片段

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

szLine包含useBE=1. x设置为trueVS2010 Pro 手表可以看到。然而,在gSettings.useBE最后一行赋值后, 的值gSettings.useBE仍然可见为假!我不知道这是怎么发生的。已安装 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

您的程序分配了gSettings.useBE两次,因此没有理由报警,因为它具有两个不同的值。

由于我们不知道是什么separateBool,我们必须猜测。

如果我不得不猜测,separateBool有类似的签名bool *(char**)和这些语义——从字符串中读取一个参数并更新参数以指向下一个参数。

如果我的假设是正确的,那么结果将是第二次调用要么找到一个评估为的参数,false要么找到没有参数或其他导致separateBoolreturn的条件false

于 2012-11-21T23:52:35.067 回答
0

Struct Member Alignment将in从原来的8 个字节更改Properties->C/C++->CodeGeneration4 个字节就可以了。但我仍然不知道为什么...

于 2012-11-22T18:02:34.257 回答