Compiler Warning (level 1) C4530
Handler pengecualian C++ yang digunakan, tetapi semantik unwind tidak diaktifkan. Tentukan /EHsc
Kode ini menggunakan penanganan pengecualian C++, tetapi /EHsc tidak disertakan dalam opsi pengkompilasi.
Keterangan
Pengkompilasi memerlukan /EHsc
opsi untuk membuat kode C++ yang mengikuti standar C++ untuk penanganan pengecualian. Semantik unwind C++ standar menentukan bahwa objek dan bingkai tumpukan yang dibangun antara tempat pengecualian dilemparkan dan di mana tertangkap harus dihancurkan dan sumber dayanya dipulihkan. Proses ini dikenal sebagai melepas tumpukan.
Opsi ini /EHsc
memberi tahu pengkompilasi untuk menghasilkan kode yang memanggil destruktor pada objek penyimpanan otomatis ketika pengecualian melewati bingkai tumpukan yang berisi. Objek penyimpanan otomatis adalah objek yang dialokasikan pada tumpukan, seperti variabel lokal. Ini disebut penyimpanan otomatis karena dialokasikan secara otomatis saat fungsi dipanggil, dan dirilis secara otomatis saat kembali. Bingkai tumpukan adalah data yang ditempatkan pada tumpukan ketika fungsi dipanggil, bersama dengan penyimpanan otomatisnya.
Ketika pengecualian dilemparkan, itu dapat melakukan perjalanan melalui beberapa bingkai tumpukan sebelum tertangkap. Bingkai tumpukan ini harus dilepaskan karena pengecualian melewatinya dalam urutan panggilan terbalik. Objek penyimpanan otomatis di setiap bingkai tumpukan harus dihancurkan untuk memulihkan sumber daya mereka dengan bersih. Ini adalah proses penghancuran dan pemulihan yang sama yang terjadi secara otomatis ketika fungsi kembali normal.
/EHsc
Ketika opsi tidak diaktifkan, objek penyimpanan otomatis dalam bingkai tumpukan antara fungsi pelemparan dan fungsi di mana pengecualian tertangkap tidak dihancurkan. Hanya objek penyimpanan otomatis yang try
dibuat di blok atau catch
yang dihancurkan, yang dapat menyebabkan kebocoran sumber daya yang signifikan dan perilaku tak terduga lainnya.
Jika tidak ada pengecualian yang mungkin dapat dilemparkan dalam executable Anda, Anda dapat dengan aman mengabaikan peringatan ini. Beberapa kode mungkin memerlukan opsi penanganan pengecualian lainnya. Untuk informasi selengkapnya, lihat /EH.
Contoh
Sampel berikut menghasilkan C4530:
// C4530.cpp
// compile with: /W1
int main() {
try{} catch(int*) {} // C4530
}
Kompilasi sampel dengan /EHsc
untuk mengatasi peringatan.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk