MSVC相当于
我发现__attribute__ ((warn_unused_result))
作为一种鼓励开发人员不忽略函数返回的错误代码的手段非常有用,但我需要它来处理MSVC以及gcc和兼容gcc的编译器,如ICC。 Microsoft Visual Studio C / C ++编译器是否具有等效机制? (到目前为止,我已经尝试通过MSDN涉水,没有任何运气。)
这是_Check_return_
。 请参阅此处查看类似注释的示例,以及这里查看功能行为。 自MSVC 2012以来,它得到了支持。
例:
_Check_return_
int my_return_must_be_checked() {
return 42;
}
更新MSVC 2012和更新
非常感谢@Albert指出,使用SAL静态代码分析时,MSVC现在支持从Visual Studio 2012开始的注释_Check_return_
。 我添加了这个答案,以便我可以包含一个可能对其他人有用的跨平台宏:
#if defined(__GNUC__) && (__GNUC__ >= 4)
#define CHECK_RESULT __attribute__ ((warn_unused_result))
#elif defined(_MSC_VER) && (_MSC_VER >= 1700)
#define CHECK_RESULT _Check_return_
#else
#define CHECK_RESULT
#endif
请注意,与gcc等人不同,(a)MSVC需要对函数的声明和定义进行注释,(b)注释需要位于声明/定义的开始处(gcc允许)。 所以用法通常需要例如:
// foo.h
CHECK_RETURN int my_function(void); // declaration
// foo.c
CHECK_RETURN int my_function(void) // definition
{
return 42;
}
另请注意,如果从命令行进行编译,则需要/analyze
(或-analyze
)开关,如果使用Visual Studio IDE进行编译,则需要等效开关。 这也往往会减缓建设的程度。
某些版本的VisualStudio包装了一个静态分析工具,以前称为PREFast(现在简称为“C / C ++代码分析”)。 PREFast使用注释来标记代码。 MustCheck中的其中一个注释符合您的要求。
链接地址: http://www.djcxy.com/p/72521.html上一篇: MSVC equivalent of