Share via


C6507

경고 C6507: 주석이 충돌합니다. 사후 조건의 Deref=0에 있는 Null 속성은 사전 조건의 Null 속성에 대한 하위 집합이어야 합니다.

이 경고는 기본 역참조 수준 0에서 사전 및 사후 조건에 충돌하는 Null 속성 값이 사용되었음을 나타냅니다. 이 경우 사전 조건은 Null=No를 지정하고 사후 조건은 Null=Yes를 지정합니다. 매개 변수가 참조로 전달되지 않기 때문에 변경할 수 없습니다. 따라서 Post 조건에서 Null=Yes를 사용할 수 없습니다.

예제

다음 코드에서는 Deref=0이 포인터에 적용되고 문자에 대한 포인터가 아니기 때문에 이 경고가 생성됩니다.

// C
#include <CodeAnalysis\SourceAnnotations.h>
void f ([SA_Pre(Null=SA_No)] [SA_Post(Null=SA_Yes)] char *pc); 

// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f([Pre(Null=No)] [Post(Null=Yes)] char *pc); 

이 경고를 해결하려면 다음 코드에서 볼 수 있는 것처럼 Pre 특성을 수정하거나, 이중 간접 참조를 사용하여 문자를 가리키도록 포인터를 변경합니다.

// C
#include <CodeAnalysis\SourceAnnotations.h>
void f1 ([SA_Pre(Null=SA_Maybe)] [SA_Post(Null=SA_Yes)] char *pc); 
// or
void f2 ([SA_Pre(Deref=1, Null=SA_No)] [SA_Post(Null=SA_Yes)] char **pc);

// C++
#include <CodeAnalysis\SourceAnnotations.h>
using namespace vc_attributes;
void f1([Pre(Null=Maybe)] [Post(Null=Yes)] char *pc);
// or 
void f2 ([Pre(Deref=1, Null=No)] [Post(Null=Yes)] char **pc);

Pre( Null=Maybe ) 및 Post( Null=No )를 지정하는 것이 가능합니다. 이것은 포인터가 Null인 경우 예외를 throw하는 함수에 유용합니다.

참고 항목

기타 리소스

주석 속성