not macro language elif dev define c++ macros comma

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?