컴파일러 경고(수준 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]) {}
}