/RTC
(Pemeriksaan kesalahan run-time)
Digunakan untuk mengaktifkan dan menonaktifkan fitur pemeriksaan kesalahan run-time, bersama dengan pragma runtime_checks .
Sintaks
/RTC1
/RTCc
/RTCs
/RTCu
Argumen
/RTC1
Setara dengan /RTCsu
.
/RTCc
Melaporkan saat nilai ditetapkan ke jenis data yang lebih kecil dan mengalihkan kehilangan data. Misalnya, ini melaporkan jika short
nilai jenis 0x0101
ditetapkan ke variabel jenis char
.
Opsi ini dapat melaporkan situasi di mana Anda ingin memotong. Misalnya, ketika Anda menginginkan 8 bit pertama yang int
dikembalikan sebagai char
. Karena /RTCc
menyebabkan kesalahan run-time jika penugasan menyebabkan kehilangan informasi, pertama-tama menutupi informasi yang Anda butuhkan untuk menghindari kesalahan run-time. Contohnya:
#include <crtdbg.h>
char get8bits(unsigned value, int position) {
_ASSERT(position < 32);
return (char)(value >> position);
// Try the following line instead:
// return (char)((value >> position) & 0xff);
}
int main() {
get8bits(12341235,3);
}
Karena /RTCc
menolak kode yang sesuai dengan standar, kode tersebut tidak didukung oleh Pustaka Standar C++. Kode yang menggunakan /RTCc
dan Pustaka Standar C++ dapat menyebabkan kesalahan pengkompilasi C1189. Anda dapat menentukan _ALLOW_RTCc_IN_STL
untuk membungkam peringatan dan menggunakan /RTCc
opsi .
/RTCs
Mengaktifkan pemeriksaan kesalahan run-time bingkai tumpukan, sebagai berikut:
Inisialisasi variabel lokal ke nilai bukan nol. Opsi ini membantu mengidentifikasi bug yang tidak muncul saat berjalan dalam mode debug. Ada kemungkinan yang lebih besar bahwa variabel tumpukan masih memiliki nilai nol dalam build debug dibandingkan dengan build rilis. Itu karena pengoptimalan pengkompilasi variabel tumpukan dalam build rilis. Setelah program menggunakan area tumpukannya, program tidak pernah direset ke 0 oleh pengkompilasi. Itu berarti setiap variabel tumpukan yang tidak diinisialisasi yang kebetulan menggunakan area tumpukan yang sama nantinya dapat mengembalikan nilai yang tersisa dari penggunaan memori tumpukan ini sebelumnya.
Deteksi overrun dan underrun variabel lokal seperti array.
/RTCs
tidak mendeteksi overruns saat mengakses memori yang dihasilkan dari compiler padding dalam struktur. Padding dapat terjadi dengan menggunakanalign
,/Zp
(Struct Member Alignment), ataupack
, atau jika Anda memesan elemen struktur sewaktu-waktu mengharuskan pengkompilasi untuk menambahkan padding.Verifikasi penunjuk tumpukan, yang mendeteksi kerusakan penunjuk tumpukan. Kerusakan penunjuk tumpukan dapat disebabkan oleh ketidakcocokan konvensi panggilan. Misalnya, menggunakan penunjuk fungsi, Anda memanggil fungsi di DLL yang diekspor sebagai
__stdcall
tetapi Anda mendeklarasikan penunjuk ke fungsi sebagai__cdecl
.
/RTCu
Melaporkan kapan variabel digunakan tanpa diinisialisasi. Misalnya, instruksi yang menghasilkan peringatan C4701 juga dapat menghasilkan kesalahan run-time di bawah /RTCu
. Setiap instruksi yang menghasilkan Compiler Warning (level 1 dan level 4) C4700 akan menghasilkan kesalahan run-time di bawah /RTCu
.
Namun, pertimbangkan fragmen kode berikut:
int a, *b, c;
if ( 1 )
b = &a;
c = a; // No run-time error with /RTCu
Jika variabel dapat diinisialisasi, variabel tidak dilaporkan pada waktu proses oleh /RTCu
. Misalnya, setelah variabel di-alias melalui penunjuk, pengkompilasi tidak melacak variabel dan melaporkan penggunaan yang tidak diinisialisasi. Akibatnya, Anda dapat menginisialisasi variabel dengan mengambil alamatnya. Operator &
berfungsi seperti operator penugasan dalam situasi ini.
Keterangan
Pemeriksaan kesalahan run-time adalah cara bagi Anda untuk menemukan masalah dalam kode yang sedang berjalan; untuk informasi selengkapnya, lihat Cara: Menggunakan pemeriksaan run-time asli.
Anda dapat menentukan lebih dari satu /RTC
opsi pada baris perintah. Argumen opsi dapat digabungkan; misalnya, /RTCcu
sama /RTCc /RTCu
dengan .
Jika Anda mengkompilasi program di baris perintah menggunakan salah /RTC
satu opsi pengkompilasi, instruksi pragma optimize
apa pun dalam kode Anda gagal secara diam-diam. Itu karena pemeriksaan kesalahan run-time tidak valid dalam build rilis (dioptimalkan).
Gunakan /RTC
untuk build pengembangan; Jangan gunakan /RTC
untuk build rilis. /RTC
tidak dapat digunakan dengan pengoptimalan pengkompilasi (/O
Opsi (Optimalkan Kode)). Gambar program yang dibangun dengan /RTC
sedikit lebih besar dan sedikit lebih lambat daripada gambar yang dibangun dengan /Od
(hingga 5 persen lebih lambat dari build /Od
).
Direktif __MSVC_RUNTIME_CHECKS
pra-prosesor akan didefinisikan ketika Anda menggunakan opsi apa pun /RTC
atau /GZ
.
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++>Code Generation.
Ubah salah satu atau kedua properti berikut: Pemeriksaan Runtime Dasar atau Pemeriksaan Tipe Yang Lebih Kecil.
Untuk mengatur opsi pengkompilasi ini secara terprogram
- Lihat BasicRuntimeChecks properti dan SmallerTypeCheck .
Lihat juga
Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC
Cara: Menggunakan pemeriksaan run-time asli