다음을 통해 공유


/sdl(추가 보안 검사 사용)

권장되는 SDL(보안 개발 수명 주기) 검사를 사용하도록 설정합니다. 이러한 검사는 보안 관련 경고를 오류로 변경하고 추가 보안 코드 생성 기능을 설정합니다.

구문

/sdl[-]

설명

/sdl 은 제공된 /GS 기준 보안 검사의 상위 집합을 사용하도록 설정하고 재정의합니다 /GS-. 기본적으로 /sdl 꺼져 있습니다. /sdl- 는 추가 보안 검사를 사용하지 않도록 설정합니다.

컴파일 시 검사

/sdl 에서는 이러한 경고를 오류로 설정합니다.

/SDL에 의해 활성화된 경고 해당 명령줄 스위치 설명
C4146 /we4146 단항 빼기 연산자가 부호 없는 형식에 적용되어 부호 없는 결과가 발생했습니다.
C4308 /we4308 음의 정수 상수가 부호 없는 형식으로 변환되어 의미 없는 결과가 발생할 수 있습니다.
C4532 /we4532 블록에서 키 breakgoto 워드를/finally continue__finally사용하는 경우 비정상적인 종료 중에 정의되지 않은 동작이 있습니다.
C4533 /we4533 변수를 초기화 하는 코드가 실행되지 않습니다.
C4700 /we4700 초기화되지 않은 지역 변수 사용.
C4703 /we4703 잠재적으로 초기화되지 않은 지역 포인터 변수 사용.
C4789 /we4789 특정 CRT(C 런타임) 함수를 사용할 때 버퍼가 오버런됩니다.
C4995 /we4995 pragma deprecated로 표시된 함수를 사용합니다.
C4996 /we4996 deprecated표시된 함수 사용

런타임 검사

사용하도록 설정하면 /sdl 컴파일러는 런타임에 이러한 검사를 수행하는 코드를 생성합니다.

  • 로 컴파일하는 것과 동일한 런타임 버퍼 오버런 검색의 /GS 엄격한 모드를 #pragma strict_gs_check(push, on)사용하도록 설정합니다.

  • 제한된 포인터 삭제를 수행합니다. 역참조를 포함하지 않는 식과 사용자 정의 소멸자가 없는 형식에서 포인터 참조는 호출 delete후 유효하지 않은 주소로 설정됩니다. 이 삭제는 부실 포인터 참조의 재사용을 방지하는 데 도움이 됩니다.

  • 클래스 멤버 포인터를 초기화합니다. 개체 인스턴스화에서 포인터 형식의 클래스 멤버를 nullptr 자동으로 초기화합니다(생성자가 실행되기 전에). 생성자가 명시적으로 초기화하지 않는 초기화되지 않은 포인터의 사용을 방지하는 데 도움이 됩니다. 컴파일러에서 생성된 멤버 포인터 초기화는 다음과 같은 한 호출됩니다.

    • 사용자 지정(사용자 정의)을 사용하여 개체가 할당되지 않음 operator new

    • 개체가 배열의 일부로 할당되지 않습니다(예 new A[x]: ).

    • 클래스가 관리되지 않거나 가져오지 않음

    • 클래스에는 사용자 정의 기본 생성자가 있습니다.

    컴파일러에서 생성된 클래스 초기화 함수에 의해 초기화하려면 멤버가 속성이나 상수가 아닌 포인터여야 합니다.

자세한 내용은 경고, /sdl 및 초기화되지 않은 변수 검색 향상을 참조하세요.

Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면

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

  2. 구성 속성>C/C++>일반 속성 페이지를 선택합니다.

  3. 속성 드롭다운 컨트롤을 사용하여 SDL 검사 속성을 설정합니다. 확인을 선택하거나 적용을 선택하여 변경 내용을 저장합니다.

참고 항목

MSVC 컴파일러 옵션
MSVC 컴파일러 명령줄 구문