Bagikan melalui


/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 menggunakan align, /Zp (Struct Member Alignment), atau pack, 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 /RTCudengan .

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

  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++>Code Generation.

  3. Ubah salah satu atau kedua properti berikut: Pemeriksaan Runtime Dasar atau Pemeriksaan Tipe Yang Lebih Kecil.

Untuk mengatur opsi pengkompilasi ini secara terprogram

Baca juga

Opsi pengkompilasi MSVC
Sintaks baris perintah pengkompilasi MSVC
Cara: Menggunakan pemeriksaan run-time asli