2012-06-11 16 views
7

Duplicar posibles:
How to make a variadic macro (variable number of arguments)¿Puedo tener una macro C que acepte una cantidad indefinida de parámetros?

Quiero tener una macro de registro en C básica que acepta argumentos similares a printf y los registra. Sin embargo, quiero que se registre (nivel de registro, archivo frente a stderr, etc.) para que sea algo configurado en tiempo de compilación, no en tiempo de ejecución; con el método no haciendo nada y optimizando el código si establezco parámetros para ignorar el registro de bajo nivel.

Hasta ahora tengo una macro que se define en función de un parámetro definido en tiempo de compilación. Si el parámetro está definido, el registro va a mi método de registro (para iniciar sesión en los archivos), de lo contrario, va al stderr. Sin embargo, solo puedo pasar una cadena en esta macro. El método de registro es capaz de tomar una cantidad indefinida de argumentos y funciona usando la sintaxis printf. Quiero saber si hay una manera de configurar mi macro para que pase una cantidad indefinida de argumentos al archivo de registro.

Y como sospecho que la respuesta es que no puedo hacer eso, hay otro método para lograr lo que quiero en C básica (no puedo usar C++ o aumentar).

Respuesta

7

C99 tienen macros que pueden aceptar una cantidad variable de argumentos. Se llaman macros variables .

http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html

Ejemplo:

#define eprintf(...) fprintf (stderr, __VA_ARGS__) 
#define dfprintf(stream, ...) fprintf(stream, "DEBUG: " __VA_ARGS__) 
2

Sí se puede. C99 admite esto out of the box.

La sintaxis es la siguiente:

#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)

Cuestiones relacionadas