編譯器警告 (層級 4) C4571
資訊:
catch(...)
自 Visual C++ 7.1 以來,語意已變更;結構化例外狀況 (SEH) 已不再攔截
當您指定/EHs
編譯程式選項時,會catch(...)
為每個區塊產生 C4571。
備註
當您指定 /EHs
編譯程序選項時, catch(...)
區塊不會攔截結構化例外狀況。 (例如,除以零或 Null 指標例外狀況。 catch(...)
區塊只會攔截明確擲回C++例外狀況。 如需詳細資訊,請參閱例外狀況處理。
此警告預設為關閉。 開啟此警告,以確保當您使用 /EHs
區塊 catch (...)
進行編譯時,不會攔截結構化例外狀況。 如需詳細資訊,請參閱 默認關閉的編譯程式警告。
您可以使用下列其中一種方式來解決 C4571:
/EHa
如果您仍然希望區塊catch(...)
攔截結構化例外狀況,請使用 編譯 。如果您不想
catch(...)
讓區塊攔截結構化例外狀況,但仍想要使用catch(...)
區塊,請勿啟用 C4571。 您仍然可以使用結構化例外狀況處理關鍵詞 (__try
、__except
和__finally
) 攔截結構化例外狀況。 但請記住,使用 編譯/EHs
時,只有在擲回C++例外狀況時,才會呼叫解構函式,而不是發生 SEH 例外狀況時。將
catch(...)
區塊取代為特定C++例外狀況的 catch 區塊,並選擇性地在C++例外狀況處理 (__try
、__except
和__finally
) 周圍新增結構化例外狀況處理。 如需詳細資訊,請參閱結構化例外狀況處理 (C/C++) 和/EH
(例外狀況處理模型)。
範例
下列範例會產生 C4571。
// C4571.cpp
// compile with: /EHs /W4 /c
#pragma warning(default : 4571)
int main() {
try {
int i = 0, j = 1;
j /= i; // this will throw a SE (divide by zero)
}
catch(...) {} // C4571 warning
}