/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) nebopack
, 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
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností vlastnosti konfigurace>C/C++>Generování kódu.
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
- Zobrazit BasicRuntimeChecks a SmallerTypeCheck vlastnosti
Viz také
Možnosti kompilátoru MSVC
Syntaxe příkazového řádku kompilátoru MSVC
Postupy: Použití nativních kontrol za běhu