Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A futásidejű hibaellenőrzési funkció engedélyezésére és letiltására szolgál, a runtime_checks pragmával együtt.
Szemantika
/RTC1
/RTCc
/RTCs
/RTCu
Arguments
/RTC1
Egyenértékű /RTCsu.
/RTCc
Azt jelenti, hogy egy érték kisebb adattípushoz van rendelve, és adatvesztést eredményez. Például azt jelenti, hogy egy short típusérték 0x0101 hozzárendelve van-e egy típusváltozóhoz char.
Ez a beállítás jelentheti azokat a helyzeteket, amelyekben csonkítani szeretne. Ha például a visszaadott első 8 bitet int szeretné visszaadni char. Mivel /RTCc futásidejű hibát okoz, ha egy hozzárendelés adatvesztést okoz, először maszkolja le az adatokat, hogy elkerülje a futásidejű hibát. Például:
#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);
}
Mivel /RTCc elutasítja a szabványnak megfelelő kódot, a C++ standard kódtár nem támogatja. A használt /RTCc kód és a C++ standard kódtár C1189 vagy C2338 fordítóhibát okozhat. Távolítsa el a /RTCc C++ Standard kódtár használatára vonatkozó lehetőséget.
/RTCs
Engedélyezi a veremkeret futásidejű hibaellenőrzését az alábbiak szerint:
Helyi változók inicializálása nemzero értékre. Ez a beállítás segít azonosítani azokat a hibákat, amelyek hibakeresési módban nem jelennek meg. Nagyobb az esélye annak, hogy a veremváltozók nulla értékkel rendelkeznek a hibakeresési buildekben a kiadási buildekhez képest. Ez a kiadási buildben lévő veremváltozók fordítóoptimalizálásának köszönhető. Miután egy program felhasználta a verem egy területét, a fordító soha nem állítja vissza 0-ra. Ez azt jelenti, hogy minden olyan nem inicializált veremváltozó, amely később ugyanazt a veremterületet használja, visszaadhatja a veremmemória korábbi használatából megmaradt értékeket.
Helyi változók, például tömbök túllépésének és aláfutásának észlelése.
/RTCsnem észleli a túlfuttatásokat, amikor olyan memóriához fér hozzá, amely a fordító szerkezeten belüli kitöltéséből ered. A kitöltés történhet a következő használatávalalign: ,/Zp(Tagigazítás) vagypack, vagy ha úgy rendezi a szerkezeti elemeket, hogy a fordítónak paddingot kell hozzáadnia.Veremmutató ellenőrzése, amely észleli a veremmutató sérülését. A veremmutató sérülését a hívási konvenció eltérése okozhatja. Ha például függvénymutatót használ, meghív egy függvényt egy DLL-ben, amely exportálva
__stdcallvan, de deklarálja a mutatót a függvényhez__cdecl.
/RTCu
Jelenti, ha a változót inicializálás nélkül használják. Egy C4701 figyelmeztetést generáló utasítás például futásidejű hibát is okozhat a következő alatt /RTCu: . A C4700(1. és 4. szint) fordítói figyelmeztetést generáló utasítások futásidejű hibát okoznak a következő alatt /RTCu: .
Vegye azonban figyelembe a következő kódrészletet:
int a, *b, c;
if ( 1 )
b = &a;
c = a; // No run-time error with /RTCu
Ha egy változó inicializálható lett volna, akkor a rendszer nem jelenti futásidőben /RTCu. Ha például egy változó át van aliasolva egy mutatón, a fordító nem követi nyomon a változót, és nem iicializált felhasználásokat jelent. Lényegében inicializálhat egy változót a cím megadásával. Ebben a helyzetben az & operátor hozzárendelési operátorként működik.
Megjegyzések
A futásidejű hibaellenőrzésekkel problémákat találhat a futó kódban; további információ : Útmutató: Natív futásidejű ellenőrzések használata.
A parancssorban /RTC több lehetőséget is megadhat. A beállítás argumentumai kombinálhatók; például ugyanaz, /RTCcu mint /RTCc /RTCua .
Ha a programot a parancssorban fordítja le a /RTC fordító bármely beállításával, a kódban található pragma optimize utasítások csendesen meghiúsulnak. Ennek az az oka, hogy a futásidejű hibaellenőrzések nem érvényesek egy kiadási (optimalizált) buildben.
Fejlesztési buildekhez használható /RTC ; Ne használja /RTC kiadási buildekhez.
/RTC nem használható fordítóoptimalizálással (/O Beállítások (Kód optimalizálása)). A beépített programképek /RTC valamivel nagyobbak és kissé lassabbak, mint a beépített rendszerképek /Od (akár 5%-kal lassabbak, mint egy /Od build).
Az __MSVC_RUNTIME_CHECKS előfeldolgozó direktíva akkor lesz definiálva, ha bármilyen /RTC lehetőséget vagy /GZlehetőséget használ.
A fordító beállításának beállítása a Visual Studio fejlesztői környezetében
Nyissa meg a projekt Tulajdonságlapok párbeszédpaneljét. További információ: C++ fordító és buildtulajdonságok beállítása a Visual Studióban.
Válassza a Konfiguráció tulajdonságai>C/C++>Kódgenerálás tulajdonságlapját.
Módosítsa az alábbi tulajdonságok egyikét vagy mindkettőt: Alapszintű futtatókörnyezet-ellenőrzések vagy kisebb típusellenőrzés.
A fordítóprogram programozott beállítása
- Látja BasicRuntimeChecks és látja a SmallerTypeCheck tulajdonságokat.
Lásd még
MSVC-fordító beállításai
MSVC-fordító parancssori szintaxisa
Útmutató: Natív futásidejű ellenőrzések használata