Fundamentação por Impulso.Pré-processamento usando macros em vez de simples define?
-
14-11-2019 - |
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 ()
?
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.