大家在VC中肯定经常用到BOOL类型
大家看看下面这段测试程序
int GetValue()
{
int i =10;
return i;
}
......
BOOL bResult;
bResult = GetValue();
if (bResult == TRUE)
{
//code 1
}
else
{
//code 2
}
这里bResult应当是TRUE而非FALSE,似乎应当执行code 1
但是 bResult == TRUE 却不成立
因为 bResult = 10 而 TRUE = 1
所以实际执行code 2。

解决方案 »

  1.   

    好经验.不过写
    if(bResult==TRUE)
    的人是很少的,多半写成if(bResult).如果写成
    if(bResult==TRUE)
    大多数情况下应该再用
    else if((bResult==FALSE)
    ...
    else
      

  2.   

    只有白痴才会写成 if(bResult==TRUE) !!!!!!!!!!!!
      

  3.   

    好经验。
    以后可以写成:if (bResult )
    不要写成:if (bResult == TRUE)
      

  4.   

    to leehq(没有读过高中的人) 就是就是,只有白痴才会写成 if(bResult==TRUE) !!!!!!!!!!!!
      

  5.   

    to TonShine (革命中......) 
    我晕
    int 返回值付给 bool
    除非机缘巧合,怎么可能为true,false
      

  6.   

    要知道,在Windows中的BOOL类型和VB中的Boolean类型不一样,你不能简单的设想它就是只有TRUE和FALSE两种取值,TRUE和FALSE只不过是便于使用而定义的两个宏,在C语言中,if语句基于以下原则改变执行流程:表达式的值为0则视为假,不执行if后的语句,表达式的值为非0则视为真,执行if后的语句,因此,若想要表达式为真,取值并不唯一,TRUE的值可以不唯一,如果一定要使用具有唯一取值的BOOL类型,可以用enum BOOL{true = 0,false = 1} bFlag; 这样bFlag就限制在0和1两中取值中了。
      

  7.   

    林子大了,什么鸟都有!!!!!!
    不知某些人有没有把if(a == b)错写成if (a = b), 同样写成if (bResult == TRUE)也不奇怪,因为它本身没错。
    如果有过不知是否也是白痴?有些错误也许暂时没发现而已。
      

  8.   

    关键是你的GetValue();返回的是什么类型!如果本身返回的类型就是BOOL我想那就没什么了。GetValue();返回的是整型,就会有多个值!所以就要注意与BOOL的关系了
      

  9.   

    有时会用到这样的函数,本人也是需要才这样,因为本人用的函数返回-1,0,1,
    -1,1有不同的用途,但是它们都是TRUE,所以才发现该问题。
      

  10.   

    if( IDOK == m_dlg.DoModal() )