Ostrzeżenie kompilatora (poziom 4) C4843
"type1": Procedura obsługi wyjątków odwołania do tablicy lub typu funkcji jest niemożliwa do osiągnięcia, zamiast tego użyj polecenia "type2".
Uwagi
Procedury obsługi odwołania do tablicy lub typu funkcji nigdy nie są zgodne dla żadnego obiektu wyjątku. Począwszy od programu Visual Studio 2017 w wersji 15.5, kompilator honoruje tę regułę i zgłasza ostrzeżenie poziomu 4. Nie pasuje on również do procedury obsługi char*
literału ciągu lub wchar_t*
do literału ciągu, gdy /Zc:strictStrings
jest używany.
To ostrzeżenie jest nowe w programie Visual Studio 2017 w wersji 15.5. Aby uzyskać informacje na temat wyłączania ostrzeżeń według wersji kompilatora, zobacz Ostrzeżenia kompilatora według wersji kompilatora.
Przykład
W tym przykładzie pokazano kilka catch
instrukcji, które powodują C4843:
// 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
}
Kompilator generuje następujące ostrzeżenia:
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
Poniższy kod unika błędu:
// C4843_fixed.cpp
// compile by using: cl /EHsc /W4 C4843_fixed.cpp
int main()
{
try {
throw "";
}
catch (int (*)[1]) {}
}