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

下一篇: Equivalent to pread/pwrite in MSVC?