我试图在我的项目中使用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,但它不是很有帮助。
发布于 2009-03-21 18:08:42
问题可能是因为您混合了SAL注释类型。虽然在MSDN上已经很清楚了,但SAL注释有两种类型:属性和...呃..。不。
<sal.h> VC2005中的#define使用非属性版本,并以下划线开头,后跟小写字母。较新的VC2008版本扩展到编译器属性,并以下划线开头(和结尾),后跟大写字母。
您已经混合了这两种类型:
属性:
非属性:
尝试更改您的注释以一致地使用单一类型。
This blog post对此进行了更多的解释。
发布于 2009-03-16 23:34:37
必须将SAL注释添加到方法的声明和定义中。我猜SAL不高兴是因为它找不到方法的定义,并假定缺少属性。
编辑澄清
对于非抽象方法,SAL注释必须出现在两个位置上。对于抽象方法,SAL不会寻找定义。在某些配置中,它实际上将确保接口的实现具有适当的符号。
https://stackoverflow.com/questions/652542
复制相似问题