首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的SAL注释警告

奇怪的SAL注释警告
EN

Stack Overflow用户
提问于 2009-03-16 23:32:17
回答 2查看 2.9K关注 0票数 3

我试图在我的项目中使用Micosoft的SAL注释,但是我得到了以下警告,我不知道为什么。

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

代码语言:javascript
复制
#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,但它不是很有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-21 18:08:42

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

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

您已经混合了这两种类型:

属性:

  • _In_
  • _Check_return_

非属性:

  • __in
  • __checkReturn

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

This blog post对此进行了更多的解释。

票数 10
EN

Stack Overflow用户

发布于 2009-03-16 23:34:37

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

编辑澄清

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/652542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档