Pergunta

Por exemplo BOOST_PP_ITERATE e BOOST_PP_ITERATION, como visto na GMan a respondeu aqui, são pré-processador de macros, sem quaisquer parâmetros.Há uma razão pela qual elas não apenas simples define e usado como tal, sem ()?

Foi útil?

Solução

Geralmente, a função de macro pode ser usado para prevenir não-intencional de macro expansão.
Por exemplo, supondo que temos a seguinte macro chamada:

BOOST_PP_CAT( BOOST_PP_ITERATION, _DEPTH )

e esperamos que esse seja expandido para BOOST_PP_ITERATION_DEPTH.
No entanto, se BOOST_PP_ITERATION é um objeto como(não funcional) macro, ele será expandido para a sua própria definição antes do token BOOST_PP_ITERATION_DEPTH é gerado por concatenação.

Outras dicas

Presumivelmente porque eles executar operações:conseqüentemente, sua utilização deve deixar claro que você, na verdade, são invocando algo e não apenas usando alguns constante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top