2017-01-24 70 views
0

嗨,我有一個問題。控制達到非void函數的結束是xcode上的錯誤,但在gcc上沒有錯誤

bool testFunction(int arg) { int value = arg; } 

這個函數在gcc &上沒有錯誤,只會發生警告。

但在xcode中,此源是錯誤。 「控制到達非虛函數結束」

我不知道爲什麼xcode中會出現錯誤。

確定將Warning Warning as Errors選項設置爲xcode中的NO。

謝謝。

+0

你剛剛返回一個值怎麼樣? –

+0

哈哈。你的評論是正確的。但是,我沒有寫出這個來源。許多人犯類似的錯誤,所以我想要一個錯誤。 :) –

+0

哦,我以爲你想消除錯誤信息。我的錯。繼續! –

回答

3

在C++中,從non-void函數返回任何內容都是未定義的行爲

請記住,編譯器不應該從代碼中消除UB。他們根本無法檢測到所有UB模式;他們只有在「懷疑」時纔會發出警告。

該模式保留「允許」的事實是爲了與舊代碼向後兼容。這是程序員的責任。

在大多數(即使不是全部)編譯器中,都可以將此特定警告設置爲錯誤。此選項不是「將所有警告視爲錯誤」。它似乎是在您的XCode環境中設置的。有關如何在XCode中找到此選項,請參閱this thread

+0

謝謝你的好消息。頭文件中的類中存在以上源。並沒有使用它,但是如果我使用這種功能,就會發生錯誤,我希望erorr發生在vs中,即使這個函數沒有使用(因爲其他人犯了同樣的錯誤)。可能嗎??? –

+0

不是庫,擁有我的代碼。和VS版本是2012 :) –

+0

您使用哪個版本的VS?在我的VS2015中,這是一個錯誤。 –

1

不同的編譯器對不同的事情發出警告。 在這種情況下應該真的發生錯誤或警告,因爲你的函數應該返回一個值。

如果將-Wall或-Wreturn-type標誌添加到g ++中,您將收到警告。 您可以通過調整構建設置「不匹配返回類型」值來完成Xcode中的等效功能。有三個設置。

  1. 是 - 警告
  2. 否 - 忽略
  3. 是(錯誤) - 將此視爲錯誤

見所附截圖。

Xcode option

關閉這個選項可能會導致您丟失其他錯誤,所以這將是最好把它留在警告至少設置。

+0

@성정민如果問題解決了,請選擇正確的答案。如果不讓我們知道是否還有其他問題。這也將有所幫助,因爲它可以讓用戶關注未解決的問題。謝謝 – ccpgh

+0

謝謝!但是,我認爲更重要的視覺工作室發生錯誤比解決ios錯誤。因上述來源錯誤來源和不良情況。所以,我需要出現錯誤在對比:) –

相關問題