studio - C Debug Print Macros
visual studio code create c++ project (6)
en C, ¿cuál es la forma correcta de definir una macro similar a printf que se imprimirá solo cuando se defina el símbolo DEBUG?
#ifdef DEBUG
#define DEBUG_PRINT(???) ???
#else
#define DEBUG_PRINT(???) ???
#endif
dónde ??? es donde no estoy seguro de qué rellenar
Algo como:
#ifdef DEBUG
#define DEBUG_PRINT(fmt, args...) fprintf(stderr, fmt, ## args)
#else
#define DEBUG_PRINT(fmt, args...) /* Don''t do anything in release builds */
#endif
Gracias mipadi, también mejoré tu DEBUG_PRINT con información de archivo.
#define DEBUG 3
#if defined(DEBUG) && DEBUG > 0
#define DEBUG_PRINT(fmt, args...) fprintf(stderr, "DEBUG: %s:%d:%s(): " fmt, /
__FILE__, __LINE__, __func__, ##args)
#else
#define DEBUG_PRINT(fmt, args...) /* Don''t do anything in release builds */
#endif
Probado con el último sonido, por ejemplo
int main(int argc, char **args) {
DEBUG_PRINT("Debugging is enabled./n");
DEBUG_PRINT("Debug level: %d", (int) DEBUG);
}
salidas:
DEBUG: debug.c:13:main(): Debugging is enabled.
DEBUG: debug.c:14:main(): Debug level: 3
He visto una buena cantidad de este idioma:
#ifdef DEBUG
# define DEBUG_PRINT(x) printf x
#else
# define DEBUG_PRINT(x) do {} while (0)
#endif
Utilízalo como:
DEBUG_PRINT(("var1: %d; var2: %d; str: %s/n", var1, var2, str));
Los paréntesis adicionales son necesarios, porque algunos compiladores de C más antiguos no admiten var-args en las macros.
Simplemente puede utilizar:
#ifdef DEBUG
#define DEBUG_PRINT printf
#else
#define DEBUG_PRINT
#endif
Use diferentes firmas de DEBUG_PRINT, no tienen que ser las mismas, como:
#ifdef DEBUG
#define DEBUG_PRINT printf
#else
#define DEBUG_PRINT(...)
#endif
De esta manera, en el modo de depuración, la llamada DEBUG_PRINT será reemplazada por printf. En el lanzamiento ignorará todos los argumentos utilizados anteriormente.
Espero eso ayude.
#ifdef DEBUG
#define DEBUG_PRINT(...) do{ fprintf( stderr, __VA_ARGS__ ); } while( false )
#else
#define DEBUG_PRINT(...) do{ } while ( false )
#endif