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.

Error: se esperaba identificador o ‘(‘ antes del token ‘)’ después de cambiar una macro.

En un programa C (u-boot), para verificar si el programa ejecuta esa macro, cambié un estado definido de la siguiente manera:

#define debug_cond(cond, fmt, args...)                  \
({                                  \
    if (cond)                           \
        log(LOG_CATEGORY,                   \
            (enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG),  \
            fmt, ##args);                   \
})

a

#define debug_cond(cond, fmt, args...)                  \
({                                  \
extern uint64_t myptr;              \
    if (cond) {                         \
        *((uint64_t *)myptr) = 0x801; myptr+=8; \ 
        log(LOG_CATEGORY,                   \
            (enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG),  \
            fmt, ##args);                   \
    }
})                 <==== línea 267

y el compilador me da este mensaje de error.

En el archivo include/log.h:267:

error: se esperaba un identificador o '(' antes del token '}'
  267 | })
      | ^
error: se esperaba un identificador o '(' antes del token ')'
  267 | })

No puedo entender qué está mal aquí. ¿Alguien puede decirme dónde me estoy equivocando?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un error de sintaxis en la línea 267 de include/log.h, específicamente se espera un identificador o ‘(‘ antes del token ‘}’ o ‘)’.

    Al examinar el código, parece haber una barra invertida al final de la línea antes de la llave de cierre. Esto podría causar el problema porque interrumpe la sintaxis de la definición de la macro.

    Para solucionar esto, la barra invertida al final de la línea debe eliminarse para que la llave de cierre esté en su propia línea.

    El código corregido debería verse así:

    #define debug_cond(cond, fmt, args...)
    ({
        extern uint64_t myptr;
        if (cond) {
            *((uint64_t *)myptr) = 0x801; myptr+=8;
            log(LOG_CATEGORY,
                (enum log_level_t)(LOGL_FORCE_DEBUG | _LOG_DEBUG),
                fmt, ##args);
        }
    })
    

    Después de aplicar esta corrección, el código debería compilarse sin errores.

Comments are closed.