es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Condicionales Doxygen con preprocesador que añade algunos argumentos a una función.

Supongamos el siguiente código:


#include <stdio.h> #include <stddef.h> #include <stdint.h> /* en/deshabilitar el segundo argumento mediante comentarios/descomentarios */ #define B_ARGHABILITADO /** * \fn add_stuff * \brief agregar cosas a cosas * \param a : bla bla #ifdef B_ARGHABILITADO (obviamente no funciona) * \param b : blb blb #endif //B_ARGHABILITADO * \param c : blc blc * \return : algunas cosas */ int add_stuff(int a, #ifdef B_ARGHABILITADO int b, #endif //B_ARGHABILITADO int c) { int total = 0; total += a; #ifdef B_ARGHABILITADO total += b; #endif //B_ARGHABILITADO total += c; return total; } int main(void) { printf("hello %d",add_stuff( 1, #ifdef B_ARGHABILITADO 2, #endif //B_ARGHABILITADO 3)); return 0; }

Me gustaría tener una única cabecera Doxygen para una función, pero esta función tiene un argumento que está condicionado por una variable preprocesadora.

¿Hay alguna manera de mantener una única cabecera Doxygen?

es decir, no utilizar dos envoltorios add_stuff2 y add_stuff3</stdint.h></stddef.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de mantener un encabezado único de Doxygen al condicionar un argumento con una variable preprocesadora. En la documentación de Doxygen, puede usar las directivas #ifdef y #else para documentar la función con y sin el argumento habilitado. Aquí hay un ejemplo:

    /**
     * \fn add_stuff
     * \brief añadir cosas a las cosas
     * \param a : bla bla
     * \param b : blb blb
     * \param c : blc blc
     * \return : algunas cosas
     * 
     * \note Esta versión de la función incluye el argumento opcional b.
     * \note Para usar la versión sin el argumento b, compile con -DB_ARG_ENABLED=0.
     */   
    #ifdef B_ARG_ENABLED 
    int add_stuff(int a, int b, int c)
    #else 
    int add_stuff(int a, int c)
    #endif /* B_ARG_ENABLED */
    {
        int total = 0;
        total += a;
    #ifdef B_ARG_ENABLED
        total += b;
    #endif /* B_ARG_ENABLED */
        total += c;
        return total;
    }
    

    Con esta configuración, puede generar documentación para ambas versiones de la función. Cuando B_ARG_ENABLED está definido, la documentación contendrá información sobre el parámetro opcional de la función. Cuando no está definido, la documentación solo mostrará los parámetros requeridos.

    Este método le permite tener una única función con un encabezado único de Doxygen que funciona en ambos casos.

Comments are closed.