realxie
realxie

Reputation: 109

macro expand in c++

Define two macros, as followed:

#define MACRO_COMBINE_INNER(A,B) A##B
#define MACRO_COMBINE(A,B) MACRO_COMBINE_INNER(A,B)

We use these macros

MACRO_COMBINE_INNER(ABC,__LINE__)
MACRO_COMBINE(ABC,__LINE__)

If the current line number is 123, that's LINE == 123, Why the results expand from the two macros are:

ABC__LINE__
ABC123

Upvotes: 1

Views: 920

Answers (1)

Swift - Friday Pie
Swift - Friday Pie

Reputation: 14589

Order of expansion plays role here, first the outlier macro is expanded, then inner ones. In first case, after expanding MACRO_COMBINE_INNER you get:

  ABC##__LINE__

which turns into ABC__LINE__, because __LINE__ is not a separate token here. In second case, preprocessor expands MACRO_COMBINE(ABC,__LINE__), then __LINE__ is expanded. `

  MACRO_COMBINE_INNER(ABC,123)

And then MACRO_COMBINE_INNER is expanded

  ABC##123

There is similar behavior with stringify operator, which requires creating macro like this

#define STRINGIFY(x) #x
#define STRING(x) STRINGIFY(x)

To be able use __LINE__ in string literal:

#define THROW_BAD_INDEX(x) throw std::out_of_range \
                           (__FILE__ ":" STRING(__LINE__) ": Bad index")

Upvotes: 2

Related Questions