共用方式為


編譯程式警告 (層級 4) C4843

'type1':無法連線到陣列或函式型別的參考例外處理常式,請改用 'type2'

備註

陣列或函式類型參考的處理常式從未可以比對所有例外狀況物件。 從 Visual Studio 2017 15.5 版開始,編譯程式會接受此規則,並引發層級 4 警告。 此外,使用 /Zc:strictStrings 時,不會再將 char*wchar_t* 的處理常式與字串常值進行比對。

此警告是Visual Studio 2017 15.5版的新功能。 如需如何依編譯程式版本停用警告的資訊,請參閱 編譯程式版本的編譯程式警告。

範例

此範例顯示導致 C4843 的數個 catch 語句:

// C4843_warning.cpp
// compile by using: cl /EHsc /W4 C4843_warning.cpp
int main()
{
    try {
        throw "";
    }
    catch (int (&)[1]) {} // C4843 (This should always be dead code.)
    catch (void (&)()) {} // C4843 (This should always be dead code.)
    catch (char*) {} // This should not be a match under /Zc:strictStrings
}

編譯程式會產生下列警告:

warning C4843: 'int (&)[1]': An exception handler of reference to array or function type is unreachable, use 'int*' instead
warning C4843: 'void (__cdecl &)(void)': An exception handler of reference to array or function type is unreachable, use 'void (__cdecl*)(void)' instead

下列程式碼可避免這個錯誤:

// C4843_fixed.cpp
// compile by using: cl /EHsc /W4 C4843_fixed.cpp
int main()
{
    try {
        throw "";
    }
    catch (int (*)[1]) {}
}