Bagikan melalui


Compiler Warning (level 1) C4297

'function' : fungsi diasumsikan tidak melempar pengecualian tetapi tidak

Deklarasi fungsi berisi penentu (mungkin implisit), noexcept penentu pengecualian kosong throw , atau atribut __declspec(nothrow), dan definisi berisi satu atau beberapa pernyataan lemparan . Untuk mengatasi C4297, jangan mencoba melempar pengecualian dalam fungsi yang dinyatakan __declspec(nothrow), noexcept(true) atau throw(). Atau, hapus noexceptspesifikasi , , throw()atau __declspec(nothrow) .

Secara default, kompilator menghasilkan penentu implisit noexcept(true) untuk fungsi destruktor dan deallocator yang ditentukan pengguna dan fungsi anggota khusus yang dihasilkan kompilator. Ini sesuai dengan standar ISO C++11. Untuk mencegah pembuatan penentu noexcept implisit dan mengembalikan pengompilasi ke perilaku non-standar Visual Studio 2013, gunakan opsi kompilator /Zc:implicitNoexcept- . Untuk informasi selengkapnya, lihat /Zc:implicitNoexcept (Penentu Pengecualian Implisit).

Untuk informasi selengkapnya tentang spesifikasi pengecualian, lihat Spesifikasi Pengecualian (throw). Selain itu, lihat /EH (Model Penanganan Pengecualian) untuk informasi tentang cara memodifikasi perilaku penanganan pengecualian pada waktu kompilasi.

Peringatan ini juga dihasilkan untuk fungsi __declspec(dllexport) yang ditandai extern "C", bahkan jika fungsi tersebut adalah fungsi C++.

Sampel berikut menghasilkan C4297:

// C4297.cpp
// compile with: /W1 /LD
void __declspec(nothrow) f1()   // declared nothrow
// try the following line instead
// void f1()
{
   throw 1;   // C4297
}