다음을 통해 공유


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