Bagikan melalui


/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 continuekata 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

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>General.

  3. 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