編譯器警告 (層級 1) C4530
已使用 C++ 例外狀況處理常式,但沒有啟用回溯語意 (Unwind Semantics)。 指定 /EHsc
程序代碼會使用C++例外狀況處理,但 編譯程序選項中未包含 /EHsc 。
備註
編譯程式需要 /EHsc
選項來建置C++遵循例外狀況處理C++標準的程序代碼。 標準C++ 回溯語意 指定在擲回例外狀況和攔截到的位置之間所建構的物件和堆棧框架,以及復原其資源。 此程序稱為 回溯堆疊。
選項 /EHsc
會指示編譯程式產生程式代碼,當例外狀況通過包含的堆疊框架時,會在自動儲存物件上呼叫解構函式。 自動儲存 對像是堆疊上配置的物件,例如局部變數。 它稱為自動記憶體,因為它會在呼叫函式時自動配置,並在函式傳回時自動釋放。 堆疊框架是在呼叫函式時放在堆疊上的數據,以及其自動儲存空間。
擲回例外狀況時,它可能會經過數個堆疊框架,再攔截。 當例外狀況以反向呼叫順序傳遞時,這些堆疊框架必須解除復原。 每個堆疊框架中的自動儲存對象必須終結,才能完全復原其資源。 這是函式正常傳回時自動發生的相同解構和復原程式。
/EHsc
未啟用 選項時,擲回函式與攔截例外狀況的函式之間的堆疊框架中的自動儲存物件不會被終結。 只有或 catch
區塊中建立的try
自動儲存物件會終結,這可能會導致大量資源流失和其他非預期的行為。
如果可執行檔中可能不會擲回任何例外狀況,您可以放心地忽略此警告。 某些程序代碼可能需要其他例外狀況處理選項。 如需詳細資訊,請參閱 /EH。
範例
下列範例會產生 C4530:
// C4530.cpp
// compile with: /W1
int main() {
try{} catch(int*) {} // C4530
}
使用編譯範例 /EHsc
以解決警告。