不是所有的控件路径都返回值

1、简介:vc编译时报这个警告,虽然不是错误,可是这确实一个不折不扣的bug。

2、产生原因:带返回值的函数在最后没有return x。

3、后果:调用这个函数时得到的返回值不一定是正确的。

4、实质:如果非void返回值的函数在结尾没有return,运行时程序如果需要在最后return,则将距离函数尾部最近的return作为该函数的结尾return。

5、临床表现:程序运行时有时候是正确的,有时候又是错误的,当某种条件符合时(就是肯定运行到函数尾部),这种错误就一直出现。

6、实例:

(1)

bool IsEven(int n)
{
 if (n % 2 != 0)
  return false;
}

int _tmain(int argc, _TCHAR* argv[])
{
 while (1)
 {
  char szInput[81];
  printf("please input a number, less equal than 0 to exit...\n");
  gets(szInput);
  int nInput = atoi(szInput);
  if (nInput == 0)
   break;
  bool bEven = IsEven(nInput);
  if (bEven)
   printf("%d is even...\n", nInput);
  else
   printf("%d is not even...\n", nInput);
 }

 return 0;
}

测试:不论输入什么数字,输出都是not even。

(2)修改下IsEven函数:

bool IsEven(int n)
{
 if (n > 1000 && n <= 10000)
  return false;
 else if (n > 10000)
  return true;
}

测试:输入小于等于1000的数字,则输出都是is even

7、测试结论:但返回值的函数如果在函数尾没有return语句,则在程序运行到函数尾部时,自动将离函数尾部最近的return语句作为该函数的结尾return。

posted @ 2011-07-02 16:07  抱月听风  阅读(21586)  评论(1编辑  收藏  举报