/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 charatanıp atanmadığını bildirir.

Bu seçenek, kesmeyi planladığınız durumları bildirebilir. Örneğin, olarak döndürülen charbir 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ılarak alignveya packyapı öğ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 __cdeclbildirirsiniz.

/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 /RTCubir ç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 /RTCubir ç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 /RTCuaynı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 /GZkullandığınızda tanımlanır.

Bu derleyici seçeneğini Visual Studio geliştirme ortamında ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Kod Oluşturma özellik sayfasını seçin.

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

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