functions - c++ variadic macros
Macros preprocesador multilĂnea (4)
Necesitas escapar de la nueva línea al final de la línea escapando con una /
:
#define sqr(X) /
((X)*(X))
¿Cómo hacer macro preprocesador multilínea? Sé cómo hacer una línea:
#define sqr(X) (X*X)
Pero necesito algo como esto:
#define someMacro(X)
class X : public otherClass
{
int foo;
void doFoo();
};
¿Cómo puedo conseguir que esto funcione?
Esto es solo un ejemplo, la macro real puede ser muy larga.
Puede hacer que una macro abarque varias líneas colocando una barra invertida ( /
) al final de cada línea:
#define F(x) (x) /
* /
(x)
Se utiliza /
como un carácter de escape de continuación de línea.
#define swap(a, b) { /
(a) ^= (b); /
(b) ^= (a); /
(a) ^= (b); /
}
EDITAR: Como @abelenky señaló en los comentarios, el carácter /
debe ser el último carácter en la línea . Si no lo es (incluso si es solo un espacio en blanco después) obtendrá mensajes de error confusos en cada línea después de él.
TENGA EN CUENTA, como señalaron Kerrek SB y coaddict, lo que debería haber sido señalado en la respuesta aceptada, SIEMPRE coloque llaves alrededor de sus argumentos. El ejemplo de sqr es el ejemplo simple enseñado en los cursos de CompSci.
Aquí está el problema: si lo define como lo hizo, ¿qué sucede cuando dice "sqr (1 + 5)"? Obtienes "1 + 5 * 1 + 5" o 11
Si coloca correctamente llaves a su alrededor, #define sqr(x) ((x)*(x))
obtienes ((1 + 5) * (1 + 5)) o lo que queríamos 36 ... hermoso.
Ed S. va a tener el mismo problema con ''swap''