1. 程式人生 > >不是所有的控制元件路徑都返回值

不是所有的控制元件路徑都返回值

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。