다음을 통해 공유


/RTC (런타임 오류 검사)

runtime_checks pragma와 함께 런타임 오류 검사 기능을 사용하거나 사용하지 않도록 설정하는 데 사용됩니다.

구문

/RTC1
/RTCc
/RTCs
/RTCu

인수

/RTC1
/RTCsu과 동일합니다.

/RTCc
값이 더 작은 데이터 형식에 할당되어 데이터가 손실되는 경우를 보고합니다. 예를 들어 형식 값이 형식 변수 0x0101short 할당되었는지 보고합니다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 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.

  2. 구성 속성>C/C++>코드 생성 속성 페이지를 선택합니다.

  3. 기본 런타임 검사 또는 더 작은 형식 검사 속성 중 하나 또는 둘 다를 수정합니다.

프로그래밍 방식으로 이 컴파일러 옵션을 설정하려면

참고 항목

MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문
방법: 네이티브 런타임 검사 기능 사용