MSVC equivalent of __attribute__ ((warn_unused_result))?

前端 未结 5 2210
旧时难觅i
旧时难觅i 2020-12-05 23:41

I\'m finding __attribute__ ((warn_unused_result)) to be very useful as a means of encouraging developers not to ignore error codes returned by functions, but I

5条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-06 00:19

    UPDATE FOR MSVC 2012 AND LATER

    Many thanks to @Albert for pointing out that MSVC now supports the annotation _Check_return_ as of Visual Studio 2012 when using SAL static code analysis. I'm adding this answer so that I can include a cross-platform macro which may be useful to others:

    #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
    

    Note that, unlike gcc et al, (a) MSVC requires annotations on both declaration and definition of a function, and (b) the annotation needs to be at the start of the declaration/definition (gcc allows either). So usage will typically need to be e.g.:


    // foo.h
    
    CHECK_RETURN int my_function(void); // declaration
    


    // foo.c
    
    CHECK_RETURN int my_function(void)  // definition
    {
        return 42;
    }
    


    Note also that you'll need the /analyze (or -analyze) switch if compiling from the command line, or the equivalent if using the Visual Studio IDE. This also tends to slow the build down somewhat.

提交回复
热议问题