不是所有的控件路径都返回值
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。