Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wordt gebruikt om de functie runtimefoutcontroles in te schakelen en uit te schakelen, in combinatie met de runtime_checks pragma.
Syntaxis
/RTC1
/RTCc
/RTCs
/RTCu
Arguments
/RTC1
Gelijk aan /RTCsu.
/RTCc
Rapporten wanneer een waarde wordt toegewezen aan een kleiner gegevenstype en resulteert in gegevensverlies. Het rapporteert bijvoorbeeld als een short typewaarde 0x0101 is toegewezen aan een variabele van het type char.
Met deze optie kunt u situaties rapporteren waarin u wilt afkappen. Als u bijvoorbeeld wilt dat de eerste 8 bits van een int geretourneerde waarde als een char. Omdat /RTCc er een runtimefout optreedt als een toewijzing gegevensverlies veroorzaakt, moet u eerst de informatie maskeren die u nodig hebt om de runtimefout te voorkomen. Voorbeeld:
#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);
}
Omdat /RTCc code wordt geweigerd die voldoet aan de standaard, wordt deze niet ondersteund door de C++-standaardbibliotheek. Code die gebruikmaakt /RTCc en de C++ Standaardbibliotheek kan compilerfout C1189 of C2338 veroorzaken. Verwijder de /RTCc optie voor het gebruik van de C++-standaardbibliotheek.
/RTCs
Hiermee schakelt u de runtimecontrole van stackframes als volgt in:
Initialisatie van lokale variabelen naar een niet-nulwaarde. Met deze optie kunt u fouten identificeren die niet worden weergegeven bij het uitvoeren in de foutopsporingsmodus. Er is een grotere kans dat stackvariabelen nog steeds een nulwaarde hebben in een foutopsporingsbuild vergeleken met een release-build. Dat komt door compileroptimalisaties van stackvariabelen in een release-build. Zodra een programma een deel van de stack heeft gebruikt, wordt het nooit opnieuw ingesteld op 0 door de compiler. Dit betekent dat alle niet-geïnitialiseerde stackvariabelen die hetzelfde stackgebied later gebruiken, waarden kunnen retourneren die overblijven van het eerdere gebruik van dit stackgeheugen.
Detectie van overschrijdingen en underruns van lokale variabelen, zoals matrices.
/RTCsdetecteert geen overschrijdingen bij het openen van geheugen dat het gevolg is van opvulling van compilers binnen een structuur. Opvulling kan optreden met behulp vanalign,/Zp(Struct Member Alignment), of , ofpackals u structuurelementen zodanig rangschikt dat de compiler opvulling moet toevoegen.Stack Pointer-verificatie, waarmee stackpointerbeschadiging wordt gedetecteerd. Beschadiging van stackpointer kan worden veroorzaakt door een niet-overeenkomende aanroepende conventie. Als u bijvoorbeeld een functie aanwijzer gebruikt, roept u een functie aan in een DLL die wordt geëxporteerd als
__stdcallmaar u de aanwijzer declareert als__cdecl.
/RTCu
Rapporten wanneer een variabele wordt gebruikt zonder geïnitialiseerd te zijn. Een instructie die bijvoorbeeld waarschuwing C4701 genereert, kan ook een runtimefout genereren onder /RTCu. Elke instructie die compilerwaarschuwing (niveau 1 en niveau 4) C4700 genereert, genereert een runtimefout onder /RTCu.
Overweeg echter het volgende codefragment:
int a, *b, c;
if ( 1 )
b = &a;
c = a; // No run-time error with /RTCu
Als een variabele kan zijn geïnitialiseerd, wordt deze niet gerapporteerd tijdens runtime door /RTCu. Nadat een variabele bijvoorbeeld is gealiaseerd via een aanwijzer, houdt de compiler de variabele niet bij en wordt het niet-geïnitialiseerde gebruik van rapporten niet bijgehouden. In feite kunt u een variabele initialiseren door het adres op te nemen. In deze situatie werkt de & operator als een toewijzingsoperator.
Opmerkingen
Runtime-foutcontroles zijn een manier om problemen in uw actieve code te vinden; Zie Procedure: Systeemeigen runtimecontroles gebruiken voor meer informatie.
U kunt meer dan één /RTC optie opgeven op de opdrachtregel. De optieargumenten kunnen worden gecombineerd; is bijvoorbeeld /RTCcu hetzelfde als /RTCc /RTCu.
Als u uw programma compileert op de opdrachtregel met behulp van een van de compileropties, mislukken alle pragma-instructies optimize in uw code op de /RTC achtergrond. Dat komt doordat runtimefoutcontroles niet geldig zijn in een release -build (geoptimaliseerd).
Gebruiken /RTC voor ontwikkelings-builds; Gebruik niet /RTC voor een release-build.
/RTC kan niet worden gebruikt met compileroptimalisaties (/O Opties (Code optimaliseren)). Een programma-installatiekopie die is gebouwd met /RTC is iets groter en iets langzamer dan een installatiekopie met /Od (tot 5 procent langzamer dan een /Od build).
De __MSVC_RUNTIME_CHECKS preprocessorrichtlijn wordt gedefinieerd wanneer u een /RTC optie of /GZ.
Deze compileroptie instellen in de Ontwikkelomgeving van Visual Studio
Het dialoogvenster Eigenschappenpagina's van het project openen. Zie C++ compiler en buildeigenschappen instellen in Visual Studio voor meer informatie.
Selecteer de eigenschappenpagina Configuratie-eigenschappen>C/C++>codegeneratie.
Wijzig een of beide van de volgende eigenschappen: Basisruntimecontroles of kleinere typecontrole.
Deze compileroptie programmatisch instellen
- Zie BasicRuntimeChecks en SmallerTypeCheck eigenschappen.
Zie ook
MSVC-compileropties
opdrachtregelsyntaxis van MSVC-compiler
Procedure: Systeemeigen runtimecontroles gebruiken