¿Cómo hacer que los compiladores en línea ignoren las declaraciones de depuración en C++?
Estoy utilizando estas líneas de código para depurar mi programa de C++.
void dbg_out(){cerr << endl;}
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
Pero el problema con esto es que cuando uso la función dbg y la envío a un juez en línea como Codeforces o Codechef, aumenta la ejecución del código. ¿Hay alguna forma de hacer que el compilador en línea ignore las declaraciones de depuración?
davy.ai
Sí, hay una manera de hacer que el compilador en línea ignore las sentencias de depuración. Uno de los enfoques comúnmente utilizados es usar directivas del preprocesador para compilar condicionalmente las sentencias de depuración. Por ejemplo, puedes definir una macro llamada
DEBUG
que habilitará las sentencias de depuración cuando esté definida, pero las deshabilitará de lo contrario. Aquí hay un ejemplo de implementación:En esta implementación, la macro
debug
se define para escribir las sentencias de depuración en el flujo de error estándar (cerr), pero solo se compila cuando la macroDEBUG
está definida. SiDEBUG
no está definida, entonces la macrodebug
se define como “42”, que es una instrucción inofensiva que no hace nada.Para habilitar las sentencias de depuración, puedes compilar tu programa con la opción
-DDEBUG
, que definirá la macroDEBUG
. Por ejemplo, si estás utilizando el compilador g++, puedes ejecutar el siguiente comando:Esto compilará tu programa con la macro
DEBUG
definida, por lo que todas las sentencias de depuración se ejecutarán. Si quieres deshabilitar las sentencias de depuración, simplemente elimina la opción-DDEBUG
al compilar tu programa.