/sdl (Aktifkan Pemeriksaan Keamanan Tambahan)
Mengaktifkan pemeriksaan Siklus Hidup Pengembangan Keamanan (SDL) yang direkomendasikan. Pemeriksaan ini mengubah peringatan yang relevan dengan keamanan menjadi kesalahan, dan mengatur fitur pembuatan kode aman tambahan.
Sintaks
/sdl
[-
]
Keterangan
/sdl memungkinkan superset pemeriksaan keamanan garis besar yang disediakan oleh /GS
dan mengambil alih /GS-
. Secara default, /sdl
nonaktif. /sdl-
menonaktifkan pemeriksaan keamanan tambahan.
Pemeriksaan Waktu Kompilasi
/sdl
mengaktifkan peringatan ini sebagai kesalahan:
Peringatan diaktifkan oleh /sdl | Sakelar baris perintah yang setara | Deskripsi |
---|---|---|
C4146 | /we4146 | Operator minus tidak sah diterapkan ke jenis yang tidak ditandatangani, menghasilkan hasil yang tidak ditandatangani. |
C4308 | /we4308 | Konstanta integral negatif dikonversi ke jenis yang tidak ditandatangani, menghasilkan hasil yang mungkin tidak berarti. |
C4532 | /we4532 | Penggunaan continue kata kunci , break , atau goto dalam __finally /finally blok memiliki perilaku yang tidak ditentukan selama penghentian abnormal. |
C4533 | /we4533 | Kode yang menginisialisasi variabel tidak akan dijalankan. |
C4700 | /we4700 | Penggunaan variabel lokal yang tidak diinisialisasi. |
C4703 | /we4703 | Penggunaan variabel pointer lokal yang berpotensi tidak diinisialisasi. |
C4789 | /we4789 | Buffer diserbu ketika fungsi run-time (CRT) C tertentu digunakan. |
C4995 | /we4995 | Penggunaan fungsi yang ditandai dengan pragma deprecated . |
C4996 | /we4996 | Penggunaan fungsi yang ditandai sebagai deprecated . |
Pemeriksaan runtime
Ketika /sdl
diaktifkan, pengkompilasi menghasilkan kode yang melakukan pemeriksaan ini pada waktu proses:
Memungkinkan mode
/GS
ketat deteksi overrun buffer run-time, setara dengan kompilasi dengan#pragma strict_gs_check(push, on)
.Melakukan sanitasi pointer terbatas. Dalam ekspresi yang tidak melibatkan dereferensi dan dalam jenis yang tidak memiliki destruktor yang ditentukan pengguna, referensi pointer diatur ke alamat yang tidak valid setelah panggilan ke
delete
. Sanitasi ini membantu mencegah penggunaan kembali referensi pointer kedaluwarsa.Menginisialisasi penunjuk anggota kelas. Secara otomatis menginisialisasi anggota kelas jenis penunjuk ke
nullptr
pada instansiasi objek (sebelum konstruktor berjalan). Ini membantu mencegah penggunaan pointer yang tidak diinisialisasi yang tidak diinisialisasi konstruktor secara eksplisit. Inisialisasi penunjuk anggota yang dihasilkan kompilator dipanggil selama:Objek tidak dialokasikan menggunakan kustom (ditentukan pengguna)
operator new
Objek tidak dialokasikan sebagai bagian dari array (misalnya
new A[x]
)Kelas tidak dikelola atau diimpor
Kelas ini memiliki konstruktor default yang ditentukan pengguna.
Untuk diinisialisasi oleh fungsi inisialisasi kelas yang dihasilkan kompilator, anggota harus menjadi penunjuk, dan bukan properti atau konstanta.
Untuk informasi selengkapnya, lihat Peringatan, /sdl, dan meningkatkan deteksi variabel yang tidak diinisialisasi.
Untuk mengatur opsi pengkompilasi ini di lingkungan pengembangan Visual Studio
Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.
Pilih halaman properti Properti>Konfigurasi C/C++>General.
Atur properti pemeriksaan SDL dengan menggunakan kontrol drop-down properti. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.
Baca juga
Opsi Pengkompilasi MSVC
Sintaks Baris Perintah Pengkompilasi MSVC
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