/RTC (Kontroly chyb za běhu)

Používá se k povolení a zakázání funkce kontrol chyb za běhu ve spojení s runtime_checks pragma.

Syntaxe

/RTC1
/RTCc
/RTCs
/RTCu

Argumenty

/RTC1
Ekvivalent k /RTCsu.

/RTCc
Sestavuje, když je hodnota přiřazena k menšímu datovému typu a vede ke ztrátě dat. Například hlásí, pokud short je typ hodnota 0x0101 přiřazena proměnné typu char.

Tato možnost může nahlásit situace, ve kterých chcete zkrátit. Například pokud chcete prvních 8 bitů vrácených int jako .char Vzhledem k tomu /RTCc , že způsobí chybu za běhu, pokud přiřazení způsobí ztrátu informací, nejprve zamaskujte informace, které potřebujete, abyste se vyhnuli chybě za běhu. Příklad:

#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);
}

Vzhledem k tomu /RTCc , že odmítne kód, který odpovídá standardu, není podporován standardní knihovnou C++. Kód, který používá /RTCc a standardní knihovna C++ může způsobit chybu kompilátoru C1189. Můžete definovat _ALLOW_RTCc_IN_STL , že chcete upozornění umlčet a použít tuto /RTCc možnost.

/RTCs
Umožňuje kontrolu chyb za běhu zásobníku následujícím způsobem:

  • Inicializace místních proměnných na nenulovou hodnotu Tato možnost pomáhá identifikovat chyby, které se nezobrazují při spuštění v režimu ladění. Existuje větší šance, že proměnné zásobníku mají v buildu ladění v porovnání s sestavením vydané verze nulovou hodnotu. Důvodem je optimalizace kompilátoru proměnných zásobníku v sestavení vydané verze. Jakmile program použije oblast svého zásobníku, kompilátor ho nikdy nena resetuje na 0. To znamená, že všechny neinicializované proměnné zásobníku, ke kterým dojde při pozdějším použití stejné oblasti zásobníku, můžou později vracet hodnoty z dřívějšího použití této paměti zásobníku.

  • Detekce přetečení a podtečení místních proměnných, jako jsou pole. /RTCs nezjistí přetečení při přístupu k paměti, která je výsledkem odsazení kompilátoru v rámci struktury. K odsazení může dojít pomocí , align/Zp (zarovnání člena struktury) nebo pack, nebo pokud seřídíte prvky struktury takovým způsobem, aby kompilátor vyžadoval přidání odsazení.

  • Ověření ukazatele zásobníku, které detekuje poškození ukazatele zásobníku Poškození ukazatele zásobníku může být způsobeno neshodou konvencí volání. Například pomocí ukazatele funkce voláte funkci v knihovně DLL, která je exportována jako __stdcall , ale deklarujete ukazatel na funkci jako __cdecl.

/RTCu
Sestavy při použití proměnné, aniž by byla inicializována. Například instrukce, která generuje upozornění C4701 může také vygenerovat chybu za běhu v části /RTCu. Všechny instrukce, které generují upozornění kompilátoru (úroveň 1 a úroveň 4) C4700 vygeneruje chybu za běhu v části /RTCu.

Zvažte ale následující fragment kódu:

int a, *b, c;
if ( 1 )
b = &a;
c = a;  // No run-time error with /RTCu

Pokud by proměnná mohla být inicializována, není hlášena za běhu /RTCu. Například po aliasu proměnné ukazatele kompilátor nesleduje proměnnou a neinicializované použití sestavy. Proměnnou můžete inicializovat tak, že vezmete její adresu. Operátor & v této situaci funguje jako operátor přiřazení.

Poznámky

Kontroly chyb za běhu představují způsob, jak najít problémy ve spuštěném kódu; Další informace naleznete v tématu Postupy: Použití nativních kontrol za běhu.

Na příkazovém řádku můžete zadat více než jednu /RTC možnost. Argumenty možností mohou být kombinovány; Například /RTCcu je stejný jako /RTCc /RTCu.

Pokud program zkompilujete na příkazovém řádku pomocí některé z možností kompilátoru /RTC , všechny instrukce direktivy pragma optimize v kódu bezobslužně selžou. Důvodem je to, že kontroly chyb za běhu nejsou v buildu vydané verze (optimalizované) platné.

Použití /RTC pro vývojové buildy; Nepoužívejte /RTC pro sestavení vydané verze. /RTC nejde použít s optimalizacemi kompilátoru (/O Možnosti (Optimalizace kódu)). Image programu sestavená pomocí /RTC je o něco větší a mírně pomalejší než obrázek sestavený ( /Od až o 5 procent pomalejší než /Od sestavení).

Direktiva __MSVC_RUNTIME_CHECKS preprocesoru bude definována při použití jakékoli /RTC možnosti nebo /GZ.

Nastavení tohoto parametru kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.

  2. Vyberte stránku vlastností vlastnosti konfigurace>C/C++>Generování kódu.

  3. Upravte jednu nebo obě z následujících vlastností: Základní kontroly modulu runtime nebo menší kontrolu typu.

Programové nastavení tohoto parametru kompilátoru

Viz také

Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC
Postupy: Použití nativních kontrol za běhu