簡體   English   中英

Visual C++ 錯誤:函數必須返回一個值

[英]Visual C++ error: function must return a value

我正在做一個多平台項目,有些平台禁用了功能,在這些功能的界面中,我經常做的事情是這樣的:

bool Foo::bar() const {
    // disabled
    abort();
}

GCC/LLVM 不要求非 void 函數返回值(它們只是發出警告),在這種情況下,我調用abort()時,它們足夠聰明,甚至不會發出警告(因為函數永遠不會返回反正)。

有沒有辦法(編譯標志?)使 Visual C++ 2010 的行為方式相同,這樣我就不會繼續破壞 Windows 構建? 我知道我總是可以在中止后返回值,但在其他平台上工作時我通常會忘記這一點,不給出錯誤的行為似乎更合適。

__declspec(noreturn)應該在 MSVC++ 編譯器中具有這種效果。 我希望標准abort被聲明為__declspec(noreturn) 但是由於編譯器在您的示例中生成錯誤,因此它可能沒有以這種方式聲明。 我建議您檢查abort的聲明。 如果其中沒有__declspec(noreturn) ,您應該以某種方式添加它。

通常,Visual C++ 編譯器允許您使用__declspec(noreturn)注釋函數以指示該函數永遠不會返回。 這有助於編譯器意識到調用此類函數后的任何代碼都是不可訪問的。

您在這里遇到的問題包含在這個 SO question中。 長話短說, abort()在 Visual C++ 運行時標頭中沒有此注釋。

當您想禁用錯誤時,添加/w34716作為編譯標志(假設您使用的是警告級別 3 或更高級別)- 現在僅發出警告(如果警告級別為 3 或更高級別)。 您也可以禁用警告 ( /wd4716 ),但這可能不是一個好主意 - 取決於由於此行為引起的警告數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM