¿Es una buena práctica usar macros C / C ++ como acceso directo para la compilación condicional?

13

Digamos que quiero tener varios tipos de mensajes de salida en mi código. Uno de ellos es DEBUG , que se imprime solo cuando el código se compila en el modo de depuración.

Normalmente tendría que escribir algo como

#ifdef DEBUG
    std::cout << "Debug message" << std::endl;
#endif

que es bastante incómodo y molesto de usar en muchos lugares.

¿Es una buena práctica definir una macro para el fragmento de código, por lo que la usarías de esta manera?

MSG_DEBUG("Debug message")

¿O hay alguna otra forma más elegante de cómo manejarla sin macros? Me interesan las posibles soluciones tanto en C como en C ++, ya que estoy usando ambos idiomas en diferentes proyectos.

    
pregunta Eenoku 17.09.2018 - 10:16

3 respuestas

19

Claro, si está de acuerdo con usar macros en primer lugar, entonces la definición de uno parametrizado en lugar de seguir repitiendo el mismo código condicional es ciertamente preferible por cualquier medida de buena codificación.

¿Deberías usar macros? En mi opinión, debería hacerlo, ya que es una práctica aceptada en C, y cualquier solución sin macro requeriría que al menos algo se ejecute incluso fuera del modo de depuración. El programador de C típico elegirá una macro un poco fea en un tiempo de ejecución innecesario en cualquier momento.

    
respondido por el Kilian Foth 17.09.2018 - 10:25
13

Hay un elemento de preferencia personal aquí, pero en C ++ prefiero hacer esto en el archivo de encabezado:

#ifdef _DEBUG
    void DebugMessage(...);
#else
    inline void DebugMessage(...) {}
#endif

De modo que la función se alinee en las compilaciones de lanzamiento, pero es una función adecuada en la compilación de depuración para que pueda tener una verificación de tipo adecuada, mensajes de error sensibles, etc. y la capacidad de agregar más funcionalidad (¿es posible el registro?) .

Obviamente, también debe incluir la definición correspondiente de la función en el archivo .cpp en un bloque #ifdef _DEBUG .

    
respondido por el Jack Aidley 17.09.2018 - 16:44
2

Definitivamente, solo asegúrate de no estar pisando las directrices del código dadas por tu equipo. Asegúrese de que ningún otro código en el sistema intente alcanzar la misma funcionalidad a través de una condición general ".

    
respondido por el Jaime Orellana 18.09.2018 - 02:02

Lea otras preguntas en las etiquetas