/RTC
(런타임 오류 검사)
runtime_checks pragma와 함께 런타임 오류 검사 기능을 사용하거나 사용하지 않도록 설정하는 데 사용됩니다.
구문
/RTC1
/RTCc
/RTCs
/RTCu
인수
/RTC1
/RTCsu
과 동일합니다.
/RTCc
값이 더 작은 데이터 형식에 할당되어 데이터가 손실되는 경우를 보고합니다. 예를 들어 형식 값이 형식 변수 0x0101
에 short
할당되었는지 보고합니다char
.
이 옵션은 잘라내려는 상황을 보고할 수 있습니다. 예를 들어 반환된 처음 8비트를 int
로 사용하려는 경우입니다 char
. /RTCc
할당으로 인해 정보가 손실되는 경우 런타임 오류가 발생하므로 먼저 런타임 오류를 방지하는 데 필요한 정보를 마스킹합니다. 예시:
#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);
}
/RTCc
표준을 준수하는 코드를 거부하므로 C++ 표준 라이브러리에서 지원되지 않습니다. C++ 표준 라이브러리를 사용하는 /RTCc
코드로 인해 컴파일러 오류 C1189가 발생할 수 있습니다. 경고를 무음으로 지정하고 옵션을 사용하도록 정의 _ALLOW_RTCc_IN_STL
할 /RTCc
수 있습니다.
/RTCs
다음과 같이 스택 프레임 런타임 오류 검사를 사용하도록 설정합니다.
0이 아닌 값으로 지역 변수를 초기화합니다. 이 옵션은 디버그 모드에서 실행할 때 표시되지 않는 버그를 식별하는 데 도움이 됩니다. 스택 변수가 릴리스 빌드에 비해 디버그 빌드에 여전히 0 값을 가질 가능성이 더 큽니다. 이는 릴리스 빌드에서 스택 변수의 컴파일러 최적화 때문입니다. 프로그램이 스택 영역을 사용한 후에는 컴파일러에서 0으로 다시 설정되지 않습니다. 즉, 나중에 동일한 스택 영역을 사용하는 초기화되지 않은 스택 변수는 이 스택 메모리의 이전 사용에서 남은 값을 반환할 수 있습니다.
배열과 같은 지역 변수의 오버런 및 언더런 검색
/RTCs
는 구조 내에서 컴파일러 패딩으로 인해 발생하는 메모리에 액세스할 때 오버런을 검색하지 않습니다. 패딩은 ,/Zp
(구조체 멤버 맞춤) 또는pack
컴파일러가 패딩을 추가하도록 요구하는 방식으로 구조 요소를 정렬하는 경우에 발생할align
수 있습니다.스택 포인터 확인을 통해 스택 포인터 손상을 검색합니다. 호출 규칙 불일치로 인해 스택 포인터 손상이 발생할 수 있습니다. 예를 들어 함수 포인터를 사용하여 내보낸 DLL
__stdcall
에서 함수를 호출하지만 함수에 대한 포인터를 다음과 같이__cdecl
선언합니다.
/RTCu
변수를 초기화하지 않고 사용하는 경우를 보고합니다. 예를 들어 경고 C4701을 생성하는 명령은 아래 /RTCu
의 런타임 오류를 생성할 수도 있습니다. 컴파일러 경고(수준 1 및 수준 4) C4700을 생성하는 모든 명령은 아래에 /RTCu
런타임 오류를 생성합니다.
그러나 다음 코드 조각을 고려합니다.
int a, *b, c;
if ( 1 )
b = &a;
c = a; // No run-time error with /RTCu
변수를 초기화할 수 있으면 런타임에 /RTCu
보고되지 않습니다. 예를 들어 변수가 포인터를 통해 별칭을 지정한 후 컴파일러는 변수를 추적하지 않고 초기화되지 않은 용도를 보고합니다. 실제로 해당 주소를 사용하여 변수를 초기화할 수 있습니다. 이 경우 연산자는 &
대입 연산자처럼 작동합니다.
설명
런타임 오류 검사는 실행 중인 코드에서 문제를 찾는 방법입니다. 자세한 내용은 방법: 네이티브 런타임 검사 사용
명령줄에서 둘 /RTC
이상의 옵션을 지정할 수 있습니다. 옵션 인수를 결합할 수 있습니다. 예를 들어 . /RTCcu
/RTCc /RTCu
컴파일러 옵션을 사용하여 명령줄에서 프로그램을 컴파일하는 경우 코드의 /RTC
pragma optimize
명령이 자동으로 실패합니다. 런타임 오류 검사는 릴리스(최적화) 빌드에서 유효하지 않기 때문입니다.
개발 빌드에 사용 /RTC
; 릴리스 빌드에는 사용하지 /RTC
마세요. /RTC
컴파일러 최적화와 함께 사용할 수 없습니다(/O
옵션(코드 최적화)). 빌드된 프로그램 이미지는 빌드 /RTC
된 이미지 /Od
보다 약간 크고 약간 느립니다(빌드보다 /Od
최대 5% 느림).
__MSVC_RUNTIME_CHECKS
모든 옵션을 사용 /RTC
하거나 /GZ
.
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.
구성 속성>C/C++>코드 생성 속성 페이지를 선택합니다.
기본 런타임 검사 또는 더 작은 형식 검사 속성 중 하나 또는 둘 다를 수정합니다.
프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면
- BasicRuntimeChecks 및 SmallerTypeCheck 속성을 참조하십시오.