Xeo
Xeo

Reputation: 131907

Rationale on Boost.Preprocessor using macros instead of simple defines?

For example BOOST_PP_ITERATE and BOOST_PP_ITERATION, as seen on GMan's answere here, are preprocessor macros, without any parameters. Is there a reason they're not just simple defines and used as such without ()?

Upvotes: 2

Views: 308

Answers (2)

Ise Wisteria
Ise Wisteria

Reputation: 11669

Generally, function like macro can be used to prevent unintentional macro expansion.
For example, assuming that we have the following macro call:

BOOST_PP_CAT( BOOST_PP_ITERATION, _DEPTH )

and we expect this will be expanded into BOOST_PP_ITERATION_DEPTH.
However, if BOOST_PP_ITERATION is an object like(non-functional) macro, it will be expanded to its own definition before the token BOOST_PP_ITERATION_DEPTH is generated by concatenation.

Upvotes: 4

Luc Touraille
Luc Touraille

Reputation: 82161

Presumably because they perform operations: consequently, their usage should make it clear that you are actually invoking something and not just using some constant.

Upvotes: 1

Related Questions