Bagikan melalui


Peringatan Pengompilasi (level 4) C4843

'type1': Penanganan pengecualian referensi ke array atau jenis fungsi tidak dapat dijangkau, gunakan 'type2' sebagai gantinya

Keterangan

Pengatur referensi ke array atau jenis fungsi tidak pernah cocok untuk objek pengecualian apa pun. Mulai Visual Studio 2017 versi 15.5, kompilator mematuhi aturan ini dan meningkatkan peringatan tingkat 4. Ini juga tidak lagi cocok dengan pengatur char* atau wchar_t* dengan string literal saat /Zc:strictStrings digunakan.

Peringatan ini baru di Visual Studio 2017 versi 15.5. Untuk informasi tentang cara menonaktifkan peringatan berdasarkan versi kompilator, lihat Peringatan pengkompilasi menurut versi kompilator.

Contoh

Sampel ini menunjukkan beberapa catch pernyataan yang menyebabkan 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
}

Pengkompilasi menghasilkan peringatan ini:

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

Kode berikut menghindari kesalahan:

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