Portability of #warning preprocessor directive

前端 未结 6 1658
孤独总比滥情好
孤独总比滥情好 2020-11-29 10:47

I know that the #warning directive is not standard C/C++, but several compilers support it, including gcc/g++. But for those that don\'t support it, will t

6条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-29 11:18

    When switching from mingw to visual studio, I added such lines to my global config header. (include it in stdafx.h)

    #ifdef __GNUC__
    //from https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html
    //Instead of put such pragma in code:
    //#pragma GCC diagnostic ignored "-Wformat"
    //use:
    //PRAGMA_GCC(diagnostic ignored "-Wformat")
    #define DO_PRAGMA(x) _Pragma (#x)
    #define PRAGMA_GCC(x) DO_PRAGMA(GCC #x)
    
    #define PRAGMA_MESSAGE(x) DO_PRAGMA(message #x)
    #define PRAGMA_WARNING(x) DO_PRAGMA(warning #x)
    #endif //__GNUC__
    #ifdef _MSC_VER
    /*
    #define PRAGMA_OPTIMIZE_OFF __pragma(optimize("", off))
    // These two lines are equivalent
    #pragma optimize("", off)
    PRAGMA_OPTIMIZE_OFF
    */
    #define PRAGMA_GCC(x)
    // https://support2.microsoft.com/kb/155196?wa=wsignin1.0
    #define __STR2__(x) #x
    #define __STR1__(x) __STR2__(x)
    #define __PRAGMA_LOC__ __FILE__ "("__STR1__(__LINE__)") "
    #define PRAGMA_WARNING(x) __pragma(message(__PRAGMA_LOC__ ": warning: " #x))
    #define PRAGMA_MESSAGE(x) __pragma(message(__PRAGMA_LOC__ ": message : " #x))
    
    #endif
    
    //#pragma message "message quoted"
    //#pragma message message unquoted
    
    //#warning warning unquoted
    //#warning "warning quoted"
    
    PRAGMA_MESSAGE(PRAGMA_MESSAGE unquoted)
    PRAGMA_MESSAGE("PRAGMA_MESSAGE quoted")
    
    #warning "#pragma warning quoted"
    
    PRAGMA_WARNING(PRAGMA_WARNING unquoted)
    PRAGMA_WARNING("PRAGMA_WARNING quoted")
    

    Now I use PRAGMA_WARNING(this need to be fixed)

    Sadly there is no #pragma warning in gcc, so it warns unspecified pragma.

    I doubt that gcc will add #pragma warning" rather than microsoft adding #warning.

提交回复
热议问题