关于用if语句判断bool函数

书上有这样一段代码,是讲述MFC调用过程的:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if(!CFrameWnd::PreCreateWindow(cs))
return FALSE;
return TRUE;}
其中括号里的CFrameWnd::PreCreateWindow函数也是一个BOOL函数,顺序应该是先执行if括号里面的函数得到一个BOOL值,再作if判断,执行了if括号里的函数,便返回真,此CMainFrame::PreCreateWindow也只能返回真,那么if下面的FALSE还有什么用处?

补充:又或者说先看CFrameWnd::PreCreateWindow执行过没有,如果没执行过,则为假,非假即真,CMainFrame::PreCreateWindow会返回FALSE,那么返回FALSE之后呢?CFrameWnd::PreCreateWindow还执行吗?
关于if的工作方式我很清楚,这段代码的实现步骤我也很清楚,否则的话我还学什么MFC?
问题是,if括号里的条件不可能为假,因为只要括号里那个函数一执行过,必返回一个真值,非真即假,所以if下面的return FALSE不可能被执行,但为什么还要加上这么一句呢?

首先明确CMainFrame类继承CFrameWnd类。其次,PreCreateWindow函数的作用,根据名称可知,是在窗口创建前执行的。那窗口调用之前我们要做什么呢?当然是注册窗口类。父类CFrameWnd的PreCreateWindow作用其实就是注册窗口类的,而基类CMainFrame重写了这个函数,为啥要重写呢?因为我们有时想更改窗口类型,定制我们想要的窗口类,所以我们需要在这个函数里面,更改cs的一些属性值,因为cs是引用变量,所以你可以选择先调用父类注册窗口,后更改属性值,也可以先更改属性值,后注册窗口类,当然如果调用父类注册窗口类失败,那基类的这个更改也就没法发挥作用,也只能返回失败,既FALSE值。
所以,综上所述,if语句里面,先调用父类函数注册窗口类,如果失败了,则基类函数也就失败了,返回FALSE值,函数结束。如果成功了,继续执行,这时,你可以更改cs的一些属性,来更改自己的窗口属性了,最后返回TRUE,表示调用成功。
例如更改窗口大小为400*400:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
cs.cx=400;
cs.cy=400;
return TRUE;
}
当然函数也可以写出这样:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.cx=400;
cs.cy=400;
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-05
这不是一个层次的return,因为这个函数需要一个BOOL类型的返回值,所以不管有没有if这个方法都得写一个return,把Ture or False返回。至于第一个返回的False,你在if这个方法上面打个括号就会发现,这个返回值是在if这个层次里面。也就是说,如果说if是真的,那么反回了一个False,下面return True则不会执行。如果if不是真的,那么默认就会返回第二return的Ture。

有时候加个大括号能看清楚很多事情,该写的还是写上,不要省,不然还真的看不出来本回答被网友采纳
第2个回答  2011-01-06
if(!CFrameWnd::PreCreateWindow(cs)) // 判断是否真
return FALSE; // 如果if成立,返回假
return TRUE // 如果上面没有任何返回值,返回真

如果把return TRUE删掉,应该会出错.

其实本人学习的是类似C语言...不过原理应该一样.
有错的话可以告诉我...

参考资料:自己.

关于if语句判断bool函数
完整的写法是:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){ if(!CFrameWnd::PreCreateWindow(cs)){ return FALSE;} else { return TRUE;} } 这么写就明白了吧?如果预创建窗口失败,则返回假,否则返回真.因为如果if条件的结果为假,则直接返回假,自动屏蔽了后面的return TRUE,反过来,如果条...

bool类型if判断
bool a =true ;if (i == 1){ a = !a; \/\/把false值赋给a了。if (!a) \/\/注意这里还有个!.not false = true,所以该判断为真 { Console.WriteLine("{0}", a);} } Console.WriteLine("{0}", a);Console.ReadKey();int i = 1;bool a =false ;if (i == 1){ a = !

Java中if 括号里的对象如果是boolean 该用=还是==
一个等号是赋值运算符,两个等号是比较运算符,无论是什么基础类型的比较都用两个等号(即==)。如果判断是个boolean类型的值,则括号内可以只有这个值,判断为真时不需要加==true,判断为假是为(!bool变量或值)就是前面加个“取反”。

关于用if语句判断bool函数
所以,综上所述,if语句里面,先调用父类函数注册窗口类,如果失败了,则基类函数也就失败了,返回FALSE值,函数结束。如果成功了,继续执行,这时,你可以更改cs的一些属性,来更改自己的窗口属性了,最后返回TRUE,表示调用成功。例如更改窗口大小为400*400:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&...

c++中if语句条件判断时,直接写if(变量名)表示什么意思?我碰到的变量...
比如整数和浮点数,0代表false,其他的代表true。对象则是创建了的为true,未创建为false。

java if()中Boolean类型前加!他是要判断什么
你的意思是不是这样 Boolean m = false;if(!m){ } 这个表示的意思是在M不为false时即m为TRUE时进入if

C# if else 是怎么判断 bool 返回值的?
static bool q(int year)这个方法,在此方法中将你输入的年份除以400,如果没有余数,是整除,那么就此方法就返回一个bool值true,表示此年份是闰年;如果你输入的年份除以4的余数为0并且除以100的余数不为0,那么也返回一个bool值true,表示此年份是闰年;这两种情况以外的就返回一个bool值false,...

什么意思bool 函数中 if (numarr[x?
在编程语言中,bool函数用于判断一个条件是否成立。当条件满足时,其返回值为true;反之,则为false。例如,if (numarr[x && x<0.00001) 表示当x小于0.00001时,执行括号内的操作。&&为逻辑与运算符,表示两个条件都需要满足。再如,if(!x) 表示当x的值为false时,执行括号内的操作。!为逻辑非...

Python中的布尔类型(bool)(python专栏003)
Python中的布尔类型(bool)是一种极其简单的数据类型,只有两个可能的值:True和False。它的核心作用在于逻辑判断和条件控制,如while和if语句的运用。值得注意的是,True和False是Python预设的常量,它们属于布尔类型,且不允许被赋值。然而,你可以通过调用内置的bool()函数将其他类型的数据转换为布尔值。

分别给出bool,int,float,指针变量 与“零值”比较的 if 语句
bool型变量:if(!var)int型变量: if(0==var)float型变量:const float epsinon = 0.00001;if ((x >= - epsinon) && (x <= epsinon)指针变量:if(var==null)

相似回答