bool
От: King of a Stellar War Украина  
Дата: 10.01.07 23:26
Оценка:
Народ или мне пора в люлю или что это:

Все переменные имеют тип bool

Вот лог из Immediate окна отладчика:

l->m_RenderState->m_IsAlphaBlending

true
r->m_RenderState->m_IsAlphaBlending
true
l->m_RenderState->m_IsAlphaBlending != r->m_RenderState->m_IsAlphaBlending
true
l->m_RenderState->m_IsAlphaBlending == r->m_RenderState->m_IsAlphaBlending
false
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: bool
От: lightSource Италия  
Дата: 10.01.07 23:30
Оценка:
Здравствуйте, King of a Stellar War, Вы писали:

KOA>Народ или мне пора в люлю или что это:


KOA>Все переменные имеют тип bool


KOA>Вот лог из Immediate окна отладчика:


l->>m_RenderState->m_IsAlphaBlending

KOA>true
r->>m_RenderState->m_IsAlphaBlending
KOA>true
l->>m_RenderState->m_IsAlphaBlending != r->m_RenderState->m_IsAlphaBlending
KOA>true
l->>m_RenderState->m_IsAlphaBlending == r->m_RenderState->m_IsAlphaBlending
KOA>false

определенно срочно в люлю. наутро заметишь какую-нить очевидную опечатку или то, что отлаживаешься в release.
Re: bool
От: Андрей Тарасевич Беларусь  
Дата: 10.01.07 23:35
Оценка:
Здравствуйте, King of a Stellar War, Вы писали:

KOA>Народ или мне пора в люлю или что это:


KOA>Все переменные имеют тип bool


KOA>Вот лог из Immediate окна отладчика:


l->>m_RenderState->m_IsAlphaBlending

KOA>true
r->>m_RenderState->m_IsAlphaBlending
KOA>true
l->>m_RenderState->m_IsAlphaBlending != r->m_RenderState->m_IsAlphaBlending
KOA>true
l->>m_RenderState->m_IsAlphaBlending == r->m_RenderState->m_IsAlphaBlending
KOA>false

Если кто-то как-то умудрился "разрушить" содержимое объекта типа 'bool', то поведение будет не определено. Например, если в два объекта типа 'bool' силой запихать какие-то разные произвольные ненулевые физические представления, то запросто может оказаться, что отладчик их показывает как 'true', но равенство не выполняется.

bool a;
bool b;
memset(&a, 15, sizeof a);
memset(&b, 20, sizeof b);
a == b; // ???
a != b; // ???


Проверь, что там физически сидит в твоих 'bool'-ах, и если там что-то неожиданное, что ищи, как оно туда попало.
Best regards,
Андрей Тарасевич
Re[2]: bool
От: King of a Stellar War Украина  
Дата: 10.01.07 23:51
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Здравствуйте, King of a Stellar War, Вы писали:


KOA>>Народ или мне пора в люлю или что это:


KOA>>Все переменные имеют тип bool


KOA>>Вот лог из Immediate окна отладчика:


l->>>m_RenderState->m_IsAlphaBlending

KOA>>true
r->>>m_RenderState->m_IsAlphaBlending
KOA>>true
l->>>m_RenderState->m_IsAlphaBlending != r->m_RenderState->m_IsAlphaBlending
KOA>>true
l->>>m_RenderState->m_IsAlphaBlending == r->m_RenderState->m_IsAlphaBlending
KOA>>false

АТ>Если кто-то как-то умудрился "разрушить" содержимое объекта типа 'bool', то поведение будет не определено. Например, если в два объекта типа 'bool' силой запихать какие-то разные произвольные ненулевые физические представления, то запросто может оказаться, что отладчик их показывает как 'true', но равенство не выполняется.


АТ>
АТ>bool a;
АТ>bool b;
АТ>memset(&a, 15, sizeof a);
АТ>memset(&b, 20, sizeof b);
АТ>a == b; // ???
АТ>a != b; // ???
АТ>


АТ>Проверь, что там физически сидит в твоих 'bool'-ах, и если там что-то неожиданное, что ищи, как оно туда попало.


Я привёл свои bool к unsigned char и получил что в них хранится шо попало, то 1, то 205, то еще что-то — эт онормально?(vc++ 8)....в общем так понял, что != == применять к bool низя, нада писать свой XOR или NOT XOR
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: bool
От: Андрей Тарасевич Беларусь  
Дата: 10.01.07 23:55
Оценка: +2
Здравствуйте, King of a Stellar War, Вы писали:

АТ>>Проверь, что там физически сидит в твоих 'bool'-ах, и если там что-то неожиданное, что ищи, как оно туда попало.


KOA>Я привёл свои bool к unsigned char и получил что в них хранится шо попало, то 1, то 205, то еще что-то — эт онормально?


Нет, это не нормально.

KOA>(vc++ 8)....в общем так понял, что != == применять к bool низя, нада писать свой XOR или NOT XOR


Применять != и == к 'bool', разумеется, можно. А вот пихать туда что попало нельзя. Еще раз: ищи кто, где, как и зачем запихал в эти 'bool' какой-то мусор. Вот там и надо править, а не писать свой xor.
Best regards,
Андрей Тарасевич
Re[4]: bool
От: King of a Stellar War Украина  
Дата: 11.01.07 00:02
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Здравствуйте, King of a Stellar War, Вы писали:


АТ>>>Проверь, что там физически сидит в твоих 'bool'-ах, и если там что-то неожиданное, что ищи, как оно туда попало.


KOA>>Я привёл свои bool к unsigned char и получил что в них хранится шо попало, то 1, то 205, то еще что-то — эт онормально?


АТ>Нет, это не нормально.


KOA>>(vc++ 8)....в общем так понял, что != == применять к bool низя, нада писать свой XOR или NOT XOR


АТ>Применять != и == к 'bool', разумеется, можно. А вот пихать туда что попало нельзя. Еще раз: ищи кто, где, как и зачем запихал в эти 'bool' какой-то мусор. Вот там и надо править, а не писать свой xor.


Я кажется понял в чем дело, там просто сравнивались не всегда инициализированны bool...
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[5]: bool
От: Sm0ke Россия ksi
Дата: 11.01.07 07:18
Оценка:
Здравствуйте, King of a Stellar War, Вы писали:


KOA>Я кажется понял в чем дело, там просто сравнивались не всегда инициализированны bool...


Перекомпилируйте проект и посмотрите на ворнинги.
Re[6]: bool
От: bkat  
Дата: 11.01.07 07:41
Оценка:
Здравствуйте, Sm0ke, Вы писали:

S>Здравствуйте, King of a Stellar War, Вы писали:



KOA>>Я кажется понял в чем дело, там просто сравнивались не всегда инициализированны bool...


S>Перекомпилируйте проект и посмотрите на ворнинги.


Ворнинги показываются в самых простых случаях.

Вот в таких, тоже не самых сложных случаях, ворнингов ожидать не стоит.

  bool *pBool = new bool;
  if (*pBool)
  {
     //
  }


Тул типа BoundsChecker будет полезнее...
Re[3]: bool
От: Кодт Россия  
Дата: 11.01.07 16:21
Оценка:
Здравствуйте, King of a Stellar War, Вы писали:

KOA>Я привёл свои bool к unsigned char и получил что в них хранится шо попало, то 1, то 205, то еще что-то — эт онормально?(vc++ 8)....


205 = 0xCD — это отладочный мусор (менеджер памяти специально забивает им свежевыделенные блоки). Проявляется в дебаге, естественно.
Если поставишь BoundsChecker, то он будет забивать другим кодом (кажется, 0x5EE5).

KOA>в общем так понял, что != == применять к bool низя, нада писать свой XOR или NOT XOR


Можно и нужно. Но только к инициализированным переменным. А иначе... принцип GIGO — garbage in, garbage out.

Если перешерстить программу в поисках неинициализированных переменных сложно — можешь воспользоваться классом auto_value (см. поиск на RSDN).
class YourMegaClass
{
    // туча членов-данных
    .....
    bool m_value;
    .....
    
    // несколько конструкторов
    YourMegaClass() : ....., m_value(false), ..... {.....}
    YourMegaClass(int) : ....., m_value(false), ..... {.....}
};

подставь вместо bool — auto_value<bool>, и избавишься от лишней писанины.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.