다음을 통해 공유


warning pragma

컴파일러 경고 메시지의 동작을 선택적으로 수정할 수 있습니다.

통사론

#pragma warning(
 [ ]
  [ ... ]
[ 엔 ]
#pragma warning( pop )

발언

다음 경고 지정자 매개 변수를 사용할 수 있습니다.

경고 지정자 의미
, , 지정된 수준에 지정된 경고를 적용합니다. 예를 들어 경고 수준이 그 이상으로 설정되지 않는 한 경고 5033(일반적으로 수준 1 경고)을 끕니다. 또한 기본적으로 꺼져 있는 지정된 경고를 설정하는 데 사용할 수 있습니다.
default 경고 동작을 기본값으로 다시 설정합니다. 또한 기본적으로 꺼져 있는 지정된 경고를 켭니다. 경고는 기본값인 문서화된 수준에서 생성됩니다.

자세한 내용은기본적으로 해제된 컴파일러 경고를 참조하세요.
disable 지정된 경고 메시지를 발행하지 마세요. 선택적 속성이 허용됩니다.
error 지정된 경고를 오류로 보고합니다.
once 지정된 메시지를 한 번만 표시합니다.
suppress 스택에서 현재 상태를 푸시하고, 다음 줄에 대해 지정된 경고를 사용하지 않도록 설정한 다음, 상태가 다시 설정되도록 경고 스택을 팝합니다.
justification 경고를 사용하지 않도록 설정하거나 표시하지 않는 이유를 설명하는 선택적 문자열입니다. Visual Studio 2022 버전 17.14에 도입되었습니다.

다음 코드 문은 매개 변수에 여러 경고 번호를 포함할 수 있으며 동일한 지시문에 여러 매개 변수를 지정할 수 있음을 보여 줍니다.

#pragma warning( disable : 4507 4034; once : 4385; error : 164 )

그러나 필드가 있는 경우 경고 번호를 하나만 지정할 수 있습니다. 다음 코드 문은 필드의 사용 방법을 보여 줍니다.

#pragma warning( disable : 4507, justification : "This warning is disabled" )

필드를 사용하여 경고가 비활성화되거나 표시되지 않는 이유를 설명합니다. 이 필드는 및 에 대해서만 지원됩니다. 옵션이 지정되면 사유가 SARIF(정적 분석 결과 교환 형식) 출력에 나타납니다. 해당 값은 UTF-8로 인코딩된 좁은 문자열 리터럴입니다. SARIF 파일을 생성하려면 컴파일러 옵션을 사용합니다 .

이 지시문은 다음 코드와 기능적으로 동일합니다.

// Disable warning messages 4507 and 4034.
#pragma warning(disable : 4507 4034)

// Issue warning C4385 only once.
#pragma warning(once : 4385)

// Report warning C4164 as an error.
#pragma warning(error : 164)

컴파일러는 0에서 999 사이의 경고 번호에 4000을 추가합니다.

4700-4999 범위의 경고 번호는 코드 생성과 연결됩니다. 이러한 경고의 경우 컴파일러가 함수 정의에 도달할 때 적용되는 경고 상태는 함수의 나머지 부분에 대해 계속 적용됩니다. 함수에서 사용하여 4699보다 큰 경고 번호의 상태를 변경하면 함수가 종료된 후에만 적용됩니다. 다음 예제에서는 코드 생성 경고 메시지를 사용하지 않도록 설정한 다음 복원하기 위해 올바르게 배치하는 방법을 보여 있습니다.

// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test()
{
   int x;
   int y = x; // no C4700 here
   #pragma warning(default:4700)   // C4700 enabled after compiling Test()
}

int main()
{
   int x;
   int y = x; // C4700
}

함수 본문 전체에서 마지막 설정이 전체 함수에 적용됩니다.

푸시 및 팝

또한 다음 구문을 지원합니다. 여기서 선택적 n 매개 변수는 경고 수준(1~4)을 나타냅니다.

#pragma warning( push [ , n ] )

#pragma warning( pop )

모든 경고에 대한 현재 경고 상태를 저장합니다. 모든 경고에 대한 현재 상태를 저장하고 전역 경고 수준을 n설정합니다.

스택에 푸시된 마지막 경고 상태를 표시합니다. 사이의 경고 상태에 대한 변경 내용은 실행 취소됩니다. 다음 예제를 고려하세요.

#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )

이 코드의 끝에서 모든 경고의 상태(4705, 4706 및 4707 포함)를 코드 시작 시의 상태로 복원합니다.

헤더 파일을 작성할 때 및 사용하여 사용자의 경고 상태 변경으로 인해 헤더가 올바르게 컴파일되지 않도록 할 수 있습니다. 헤더의 시작 부분에 사용하고 끝에 . 예를 들어 경고 수준 4에서 완전히 컴파일되지 않는 헤더가 있을 수 있습니다. 다음 코드는 경고 수준을 3으로 변경한 다음 헤더 끝에 원래 경고 수준을 복원합니다.

#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )

다음 중에서 선택

경고 억제를 세밀하게 제어할 수 있습니다.

  • [[gsl::suppress]] Microsoft C++ Code Analysis 내보낸 경고만 표시하지 않습니다. 범위 또는 특정 선언에 적용할 수 있는 C++ 핵심 지침 검사와 함께 사용합니다.
  • 는 컴파일러 경고에 사용할 수 있습니다. 코드의 구조를 크게 변경하지 않고 특정 코드 블록에서 경고를 표시하지 않는 경우에 유용합니다.

가능하면 [[gsl::suppress]] 사용하여 Microsoft C++ Code Analysis 경고를 표시하지 않습니다.

경고를 표시하지 않는 데 도움이 되는 컴파일러 옵션에 대한 자세한 내용은 및 참조하세요.

참고 항목

pragma 지시문과 및 키워드를