visual studio run programar program how create compile code c macros

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