我正在尝试在我的项目中使用 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 注释有两种类型:属性和...呃……不是。

#define进入 <sal.h> VC2005使用无属性版本并以下划线开头,后跟 小写 信。较新的 VC2008 版本扩展到编译器属性并以下划线开头(和结尾),后跟 首都 信。

您混合了两种类型:

属性:

  • _在_
  • _检查_返回_

非属性:

  • __在
  • __check返回

尝试更改注释以一致地使用单一类型。

这篇博文 对此有更多解释。

其他提示

您必须添加SAL注释的声明和一个方法的定义两者。我猜SAL的不满,因为它无法找到方法的定义,并假定属性丢失。

修改澄清

SAL annotions必须出现在非抽象方法这两个位置。对于抽象方法SAL不会找一个定义。在某些构造中它实际上将确保接口的实现具有适当的符号。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top