이상한 소금 주석 경고
-
19-08-2019 - |
문제
프로젝트에 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 ...
그만큼 #define
s in <sal.h>
VC2005는 비 관리 버전을 사용하고 밑줄로 시작한 다음 소문자 편지. 최신 VC2008 버전은 컴파일러 속성으로 확장하고 밑줄과 다음과 같은 시작 (및 끝). 수도 편지.
두 가지 유형을 혼합했습니다.
기인하다:
- _안에_
- _check_return_
비 승인 :
- __안에
- __checkreturn
단일 유형을 일관되게 사용하도록 주석을 변경해보십시오.
이 블로그 게시물 이것에 대해 조금 더 설명합니다.
다른 팁
선언과 방법의 정의에 SAL 주석을 추가해야합니다. 방법의 정의를 찾을 수없고 속성이 누락되었다고 가정하기 때문에 Sal이 화가 났다고 생각합니다.
편집하다 설명
SAL 주석은 비 임금 방법을 위해 두 위치에 모두 나타나야합니다. 추상 방법의 경우 SAL은 정의를 찾지 않습니다. 특정 구성에서는 실제로 인터페이스의 구현에 적절한 표기법이 있는지 확인합니다.