/RTC
(Çalışma zamanı hata denetimleri)
runtime_checks pragması ile birlikte çalışma zamanı hata denetimleri özelliğini etkinleştirmek ve devre dışı bırakmak için kullanılır.
Söz dizimi
/RTC1
/RTCc
/RTCs
/RTCu
Bağımsız değişkenler
/RTC1
ile eşdeğerdir /RTCsu
.
/RTCc
Bir değerin daha küçük bir veri türüne atandığı ve veri kaybına neden olduğunu bildirir. Örneğin, türünde bir short
değerin 0x0101
türünde bir değişkene char
atanıp atanmadığını bildirir.
Bu seçenek, kesmeyi planladığınız durumları bildirebilir. Örneğin, olarak döndürülen char
bir int
öğesinin ilk 8 bitini istediğinizde. Atama /RTCc
herhangi bir bilgi kaybına neden olursa bir çalışma zamanı hatasına neden olduğundan, çalışma zamanı hatasını önlemek için ihtiyacınız olan bilgileri maskeleyebilirsiniz. Örneğin:
#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);
}
Standarda /RTCc
uyan kodu reddettiği için C++ Standart Kitaplığı tarafından desteklenmez. ve C++ Standart Kitaplığı kullanan /RTCc
kod, derleyici hatası C1189'a neden olabilir. Uyarıyı susturmak için tanımlayabilir _ALLOW_RTCc_IN_STL
ve seçeneğini kullanabilirsiniz /RTCc
.
/RTCs
Yığın çerçevesi çalışma zamanı hata denetimini aşağıdaki gibi etkinleştirir:
Yerel değişkenleri sıfır olmayan bir değere başlatma. Bu seçenek, hata ayıklama modunda çalışırken görünmeyen hataları tanımlamaya yardımcı olur. Yığın değişkenlerinin hata ayıklama derlemesinde yayın derlemesine kıyasla sıfır değere sahip olma olasılığı daha yüksektir. Bunun nedeni, bir yayın derlemesindeki yığın değişkenlerinin derleyici iyileştirmeleridir. Bir program yığınının bir alanını kullandıktan sonra derleyici tarafından hiçbir zaman 0 olarak sıfırlanır. Bu, daha sonra aynı yığın alanını kullanan başlatılmamış yığın değişkenlerinin bu yığın belleğinin önceki kullanımından kalan değerleri döndürebileceği anlamına gelir.
Diziler gibi yerel değişkenlerin taşmalarını ve alt çalıştırmalarını algılama.
/RTCs
bir yapı içindeki derleyici doldurmasından kaynaklanan belleğe erişirken taşmalar algılamaz. Doldurma, ,/Zp
(Yapı Üyesi Hizalaması) veya kullanılarakalign
veyapack
yapı öğelerini derleyicinin doldurma eklemesini gerektirecek şekilde sıralarsanız oluşabilir.Yığın işaretçisi bozulmalarını algılayan yığın işaretçisi doğrulaması. Yığın işaretçisi bozulmasına çağrı kuralı uyuşmazlığı neden olabilir. Örneğin, bir işlev işaretçisi kullanarak, bir DLL'de işlev olarak
__stdcall
dışarı aktarılan bir işlevi çağırırsınız, ancak işaretçiyi işleve olarak__cdecl
bildirirsiniz.
/RTCu
Bir değişkenin başlatılmadan ne zaman kullanıldığını bildirir. Örneğin, uyarı C4701 oluşturan bir yönerge altında /RTCu
bir çalışma zamanı hatası da oluşturabilir. Derleyici Uyarısı (düzey 1 ve düzey 4) C4700 oluşturan tüm yönergeler altında /RTCu
bir çalışma zamanı hatası oluşturur.
Ancak aşağıdaki kod parçasını göz önünde bulundurun:
int a, *b, c;
if ( 1 )
b = &a;
c = a; // No run-time error with /RTCu
Bir değişken başlatılmış olabilirse, tarafından /RTCu
çalışma zamanında raporlanmaz. Örneğin, bir değişken bir işaretçi aracılığıyla diğer adlandırıldıktan sonra derleyici değişkeni izlemez ve başlatılmamış kullanımları raporlamaz. Aslında, bir değişkenin adresini alarak değişkeni başlatabilirsiniz. işleci &
bu durumda atama işleci gibi çalışır.
Açıklamalar
Çalışma zamanı hata denetimleri, çalışan kodunuzdaki sorunları bulmanın bir yoludur; Daha fazla bilgi için bkz . Nasıl yapılır: Yerel çalışma zamanı denetimlerini kullanma.
Komut satırında birden /RTC
fazla seçenek belirtebilirsiniz. Seçenek bağımsız değişkenleri birleştirilebilir; örneğin, /RTCcu
ile /RTCc /RTCu
aynıdır.
Derleyici seçeneklerinden herhangi birini /RTC
kullanarak programınızı komut satırında derlerseniz, kodunuzdaki pragma optimize
yönergeleri sessizce başarısız olur. Bunun nedeni, çalışma zamanı hata denetimlerinin sürüm (iyileştirilmiş) derlemesinde geçerli olmadığındandır.
Geliştirme derlemeleri için kullanın /RTC
; Yayın derlemesi için kullanmayın /RTC
. /RTC
derleyici iyileştirmeleriyle kullanılamaz (/O
Seçenekler (Kodu İyileştir)). ile /RTC
oluşturulan bir program görüntüsü, ile /Od
oluşturulan bir görüntüden biraz daha büyük ve biraz daha yavaştır (derlemeden yüzde 5'e kadar daha /Od
yavaştır).
__MSVC_RUNTIME_CHECKS
Önişlemci yönergesi, herhangi bir /RTC
seçenek veya /GZ
kullandığınızda tanımlanır.
Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için
Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.
Yapılandırma Özellikleri>C/C++>Kod Oluşturma özellik sayfasını seçin.
Aşağıdaki özelliklerden birini veya her ikisini de değiştirin: Temel Çalışma Zamanı Denetimleri veya Daha Küçük Tür Denetimi.
Bu derleyici seçeneğini program üzerinden ayarlamak için
- Bkz BasicRuntimeChecks . ve SmallerTypeCheck özellikleri.
Ayrıca bkz.
MSVC derleyici seçenekleri
MSVC derleyicisi komut satırı söz dizimi
Nasıl yapılır: Yerel çalışma zamanı denetimlerini kullanma