C++ concatenating __FILE__ and __LINE__ macros?

后端 未结 1 1087
挽巷
挽巷 2020-12-02 17:04

I want my exception messages to contain info about the exception location.

So I would like to have some like thing this.

#define LOCATION __FILE__ \"         


        
相关标签:
1条回答
  • 2020-12-02 17:38

    You need to expand that macro in two levels:

    #define S1(x) #x
    #define S2(x) S1(x)
    #define LOCATION __FILE__ " : " S2(__LINE__)
    

    You need expand __LINE__ in two levels, before passing it to #x. First of all, using operator # in a function-like macro, it must be followed by a macro parameter but __LINE__ is not a parameter, so compiler complains it's a stray operator. On the other hand, __LINE__ itself is a macro and contains current line number, it should be expanded to the number before using it with #, otherwise, you will get string "__LINE__" instead of a number.

    Macro S2(__LINE__) expands __LINE__ to a line number, then we pass the line number to #x.

    0 讨论(0)
提交回复
热议问题