繁体   English   中英

奇怪的 SAL 注释警告

[英]Strange SAL annotation warning

我正在尝试为我的项目使用 Micosoft 的 SAL 注释,但是我收到以下警告,我不知道为什么。

例如,我创建了一个新的 C++ 控制台应用程序,并具有以下代码:

#include <sal.h>

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

int main()
{
    return 0;
}

当我使用 Visual Studio 2008 编译时,我收到以下警告:

警告 C6540:在此 function 上使用属性注释将使其所有现有的 __declspec 注释无效

在文件“c1xxast”中

我究竟做错了什么? 如果我删除_Check_return___in ,警告就会消失。

我找不到对警告 C6550 的任何引用。 但是,可以在此处找到相同的文本: http://msdn.microsoft.com/en-us/library/dd445322.aspx ,但这不是很有帮助。

问题可能是因为您混合了 SAL 注释类型。 虽然在 MSDN 上说得很清楚,但有两种类型的 SAL 注释:属性和......呃......不是。

<sal.h> VC2005 中的#define使用非属性版本,并以下划线开头,后跟小写字母。 较新的 VC2008 版本扩展到编译器属性,并以下划线后跟大写字母开头(和结尾)。

您混合了两种类型:

属性:

  • _在_
  • _Check_return_

非属性:

  • __在
  • __checkReturn

尝试更改注释以始终使用单一类型。

这篇博客文章对此进行了更多解释。

您必须将 SAL 注释添加到方法的声明和定义中。 我猜 SAL 很不高兴,因为它找不到方法的定义并假设缺少属性。

编辑澄清

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM