How can I use #pragma message() so that the message points to the file(lineno)?

前端 未结 6 901
一生所求
一生所求 2021-01-30 09:01

In order to add \'todo\' items into my code, I want to put a message in the compiler output.
I would like it to look like this:

c:/temp/main.cpp(104): TODO -         


        
6条回答
  •  佛祖请我去吃肉
    2021-01-30 09:34

    This is an addendum to the answer for those who find it tedious to punch in #pragma directives every-time they need to put a bookmark in the code: You can save a few keystrokes by whipping up a macro to do this for you! While in general, you cannot have a #pragma directive within macros, MS C/C++ compilers 2008 and above do support a special vendor-specific extension called the __pragma which can be used with macros. See Pragma Directives and the __Pragma Keyword.

    I use something akin to the following on a daily basis:

    #define STR2(x) #x
    #define STR1(x) STR2(x)
    #define LOC __FILE__ "("STR1(__LINE__)") : Warning Msg: "
    #define WARNING_BUILDER(x) __FILE__ "("STR1(__LINE__)") : Warning Msg: " __FUNCTION__ " requires " #x
    #define WREVIEW WARNING_BUILDER(review)
    #define WUT WARNING_BUILDER(unit-testing)
    
    #ifdef SPECIAL_WARNINGS
        #ifdef SPECIAL_WARNINGS_REVIEW
            #define MARK_FOR_REVIEW() do { \
                        __pragma(message( WREVIEW )) \
                    } while (0)
        #else
            #define MARK_FOR_REVIEW 
        #endif
    
        #ifdef SPECIAL_WARNINGS_UNIT_TEST
            #define MARK_FOR_UNIT_TEST() do { \
                        __pragma(message( WUT )) \
                    } while (0)
        #else
            #define MARK_FOR_UNIT_TEST 
        #endif
    #endif
    
    
    // uncomment/set in build-environment to enable special warnings
    //#define SPECIAL_WARNINGS
    #ifdef SPECIAL_WARNINGS
    // uncomment/set in build-environment if you want only code review warnings
    //#define SPECIAL_WARNINGS_REVIEW
    // uncomment/set in build-environment if you want only unit-test warnings
    //#define SPECIAL_WARNINGS_UNIT_TEST
    #endif
    
    int main()
    {
    MARK_FOR_REVIEW();
    MARK_FOR_UNIT_TEST();
    }
    

    You can easily extend it to suit your needs and add more warnings. The good part of having such a system is that you can selectively turn-on say, only code-review items and not have to worry about anything else by setting the appropriate macro in the build settings.

提交回复
热议问题