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