c++ - macro - define max en c
Cómo pasar un bloque de código arbitrario a la macro C como un param (1)
Hay una serie de soluciones posibles.
Si solo necesita una expresión (no un bloque de código completo), puede encerrarla en (
y )
FOR_VECTOR( int, v, (func(i,1)) )
funcionará - (func(i,1))
se trata como macro argumento único
Otra solución parcial son las macros variadas , si su preprocesador las admite.
Puedes definir macros
#define COMMA ,
#define LPAR (
#define RPAR )
y utilícelos para formar su bloque de código insted de real (
,
y )
FOR_VECTOR( int, v, func LPAR i COMMA 1 RPAR )
Aunque no es muy legible.
O puede hacer un truco al comentar las comillas de un literal de cadena después de la sustitución de macro:
FOR_VECTOR( type, vect, code_block ) /
for( vector<type>::iterator i=vect.begin(); i!=vect.end(); ++i ) { /
/code_block/; /
}
FOR_VECTOR( int, v, *"*/ func(i,1); proc(i,2); /*"* )
Quiero crear una macro que acepte el bloque de código arbitrario como su parámetro como
FOR_VECTOR( type, vect, code_block ) /
for( vector<type>::iterator i=vect.begin(); i!=vect.end(); ++i ) { /
code_block; /
}
El problema es el bloque de código en el parámetro, que puede contener un número arbitrario de ,
y )
caracteres.
¿Hay alguna buena solución?