У меня есть следующий фрагмент кода
fscanf( fSettings, "%s", szLine );
bool x = separateBool ( szLine );
gSettings.useBE = x;
szLine
содержит useBE=1
, x
установлен в true
и часы VS2010 Pro видят это. Однако после присвоения значения gSettings.useBE
в последней строке значение gSettings.useBE
все еще виден как ложный! Я понятия не имею, как это происходит. VS2010 SP1 установлен. Большое спасибо за любой вклад.
Редактировать:
Отдельным элементом является следующая функция:
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 );
все делает правильно.
Ваша программа присваивается gSettings.useBE
дважды, поэтому нет причин для тревоги, потому что это видно с двумя разными значениями.
Так как мы не знаем что separateBool
действительно, мы должны догадаться.
Если бы мне пришлось угадывать, separateBool
имеет подпись как bool *(char**)
и эта семантика — прочитать один параметр из строки и обновить аргумент, чтобы он указывал на следующий параметр.
Если мое предположение верно, следствием будет то, что второй вызов либо найдет параметр, который оценивает false
или не находит параметр или какое-либо другое условие, которое вызывает separateBool
возвращать false
,
Изменение Struct Member Alignment
в Properties->C/C++->CodeGeneration
в 4 байта из оригинала 8 байт делает трюк. Но я до сих пор понятия не имею, почему …