문제

프로젝트에 Micosoft의 Sal 주석을 사용하려고하지만 다음 경고를 받고 이유를 모르겠습니다.

예를 들어, 새로운 C ++ 콘솔 응용 프로그램을 만들었고이 코드가 있습니다.

#include <sal.h>

class Whatever
{
public:
    _Check_return_ int Method(__in int number) ;
};

int main()
{
    return 0;
}

Visual Studio 2008을 사용하여 컴파일하면 다음 경고를받습니다.

경고 c6540 :이 함수에서 속성 주석을 사용하면 기존의 모든 __declspec 주석이 무효화됩니다.

"c1xxast"파일에서

내가 뭘 잘못하고 있죠? 내가 둘 중 하나를 제거하면 _Check_return_ 아니면 그 __in, 경고가 사라집니다.

경고 C6550에 대한 언급을 찾을 수 없습니다. 그러나 동일한 텍스트가 여기에서 찾을 수 있습니다. http://msdn.microsoft.com/en-us/library/dd445322.aspx, 그러나 그다지 도움이되지 않습니다.

도움이 되었습니까?

해결책

문제는 SAL 주석 유형을 혼합하기 때문일 수 있습니다. MSDN에서는 매우 명확하게 만들어졌지만 SAL 주석에는 두 가지 유형이 있습니다 : 속성과 ... er ...

그만큼 #defines in <sal.h> VC2005는 비 관리 버전을 사용하고 밑줄로 시작한 다음 소문자 편지. 최신 VC2008 버전은 컴파일러 속성으로 확장하고 밑줄과 다음과 같은 시작 (및 끝). 수도 편지.

두 가지 유형을 혼합했습니다.

기인하다:

  • _안에_
  • _check_return_

비 승인 :

  • __안에
  • __checkreturn

단일 유형을 일관되게 사용하도록 주석을 변경해보십시오.

이 블로그 게시물 이것에 대해 조금 더 설명합니다.

다른 팁

선언과 방법의 정의에 SAL 주석을 추가해야합니다. 방법의 정의를 찾을 수없고 속성이 누락되었다고 가정하기 때문에 Sal이 화가 났다고 생각합니다.

편집하다 설명

SAL 주석은 비 임금 방법을 위해 두 위치에 모두 나타나야합니다. 추상 방법의 경우 SAL은 정의를 찾지 않습니다. 특정 구성에서는 실제로 인터페이스의 구현에 적절한 표기법이 있는지 확인합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top