Estou tentando entender os detalhes essenciais de como funciona o pré-processador C++.
Suponha que temos:
#define LP (
#define F(X) a
O código a seguir é pré-processado para a
:
#define G1(Y) F Y
G1(LP) 1 )
No entanto, o código a seguir é pré-processado para F ( 1 )
:
#define G2(Y) F LP
G2(LP) 1 )
Ok, acho que isso faz sentido se o LP
argumento já estiver expandido no momento em que é inserido na macro.
Exceto, esse não é o caso! O código a seguir é pré-processado para F "LP" 1 )
, não F "(" 1 )
:
#define G3(Y) F #Y
G3(LP) 1 )
Ok, agora estou confuso. Quais são as regras por trás quando um parêntese aberto é tratado como o início de uma invocação de macro semelhante a uma função?