컴파일러 경고 메시지의 동작을 선택적으로 수정할 수 있습니다.
통사론
#pragma warning(
warning-specifier:warning-number-list,justification:string-literal[ ]
;warning-specifier:warning-number-list[ ... ])
#pragma warning( push,[ 엔 ])
#pragma warning( pop )
발언
다음 경고 지정자 매개 변수를 사용할 수 있습니다.
| 경고 지정자 | 의미 |
|---|---|
1, 2, 34 |
지정된 수준에 지정된 경고를 적용합니다. 예를 들어 #pragma warning (3 : 5033) 경고 수준이 그 이상으로 설정되지 않는 한 경고 5033(일반적으로 수준 1 경고)을 /w3 끕니다. 또한 기본적으로 꺼져 있는 지정된 경고를 설정하는 데 사용할 수 있습니다. |
default |
경고 동작을 기본값으로 다시 설정합니다. 또한 기본적으로 꺼져 있는 지정된 경고를 켭니다. 경고는 기본값인 문서화된 수준에서 생성됩니다. 자세한 내용은기본적으로 해제된 |
disable |
지정된 경고 메시지를 발행하지 마세요. 선택적 justification 속성이 허용됩니다. |
error |
지정된 경고를 오류로 보고합니다. |
once |
지정된 메시지를 한 번만 표시합니다. |
suppress |
스택에서 pragma 현재 상태를 푸시하고, 다음 줄에 대해 지정된 경고를 사용하지 않도록 설정한 다음, pragma 상태가 다시 설정되도록 경고 스택을 팝합니다. 선택적 justification 속성이 허용됩니다. |
다음 코드 문은 warning-number-list 매개 변수에 여러 경고 번호를 포함할 수 있으며 동일한 warning-specifier 지시문에 여러 pragma 매개 변수를 지정할 수 있음을 보여 줍니다.
#pragma warning( disable : 4507 4034; once : 4385; error : 164 )
그러나 필드가 있는 경우 justification 경고 번호를 하나만 지정할 수 있습니다. 다음 코드 문은 필드의 사용 justification 방법을 보여 줍니다.
#pragma warning( disable : 4507, justification : "This warning is disabled" )
이 justification 필드를 사용하면 경고가 비활성화되거나 표시되지 않는 이유를 설명할 수 있습니다. 이 justification 필드는 및 disablesuppress에 대해서만 warning-specifier 지원됩니다. 이 값은 옵션이 지정되면 SARIF 출력에 /analyze:log:includesuppressed 표시됩니다. 해당 값은 UTF-8로 인코딩된 좁은 문자열 리터럴입니다.
이 지시문은 다음 코드와 기능적으로 동일합니다.
// 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 범위의 경고 번호는 코드 생성과 연결됩니다. 이러한 경고의 경우 컴파일러가 함수 정의에 도달할 때 적용되는 경고 상태는 함수의 나머지 부분에 대해 계속 적용됩니다. 함수에서 warningpragma 사용하여 4699보다 큰 경고 번호의 상태를 변경하면 함수가 종료된 후에만 적용됩니다. 다음 예제에서는 코드 생성 경고 메시지를 사용하지 않도록 설정한 다음 복원하기 위해 warningpragma 올바르게 배치하는 방법을 보여 있습니다.
// 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
}
함수 본문 전체에서 warningpragma 마지막 설정이 전체 함수에 적용됩니다.
푸시 및 팝
또한 warningpragma 다음 구문을 지원합니다. 여기서 선택적 n 매개 변수는 경고 수준(1~4)을 나타냅니다.
#pragma warning( push [ , n ] )
#pragma warning( pop )
pragma
warning( push ) 모든 경고에 대한 현재 경고 상태를 저장합니다.
pragma
warning( pop ) 스택에 푸시된 마지막 경고 상태를 표시합니다.
push
pop 사이의 경고 상태에 대한 변경 내용은 실행 취소됩니다. 다음 예제를 고려하세요.
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )
이 코드의 끝에서 pop 모든 경고의 상태(4705, 4706 및 4707 포함)를 코드 시작 시의 상태로 복원합니다.
헤더 파일을 작성할 때 push 및 pop 사용하여 사용자의 경고 상태 변경으로 인해 헤더가 올바르게 컴파일되지 않도록 할 수 있습니다. 헤더의 시작 부분에 push 사용하고 끝에 pop. 예를 들어 경고 수준 4에서 완전히 컴파일되지 않는 헤더가 있을 수 있습니다. 다음 코드는 경고 수준을 3으로 변경한 다음 헤더 끝에 원래 경고 수준을 복원합니다.
#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )
경고를 표시하지 않는 데 도움이 되는 컴파일러 옵션에 대한 자세한 내용은 /FI 및 /w참조하세요.