Tenemos una macro de función #define FOO(arg) foo(arg)
con int foo(const char* bar);
. Cuando se define NDEBUG, FOO se define como #define FOO(arg) 0
, sin embargo, esto causa muchas advertencias del compilador porque en muchos casos no se usa el valor de retorno de FOO. La solución debería funcionar con los compiladores ANSI C y no causar advertencias. He intentado:Macro de función que se evalúa a cero y se puede utilizar como una declaración
(void)0
: no se puede assigend a la variable
static int foo(const char* bar) { return 0; }
: causas advertencia función estática no utilizado en algunos módulos
static inline int foo(const char* bar) { return 0; }
: sólo funciona con los compiladores C99
Gracias por su ¡ayuda!
edit1: Es como una macro de rastreo y se usa en todo el proyecto. En su mayoría solo se usa como una declaración como FOO("function x called");
, pero en algunos casos vi if (FOO("condition a")) { /* some more debug output */ }
. Con NDEBUG definido y la optimización habilitada, no debe quedar nada de FOO. No se me ocurrió esto, pero tengo que limpiar este desastre :).
Edit2: Debo añadir que para la liberación gcc construcciones se utilizan estas banderas: -O3 -Wall -ansi
Edit3: Por ahora voy con __inline int dummy() { return 0; }
. __inline funciona tanto con VisualC como con GCC en modo ansi.
puedo mostrar más ejemplos de cómo foo() '' se utiliza en el código? – unwind
¿Siempre usa el valor de retorno de, por ejemplo, 'printf()'? – pmg
Si no te importa llamar a foo() y solo quieres asegurarte de que el valor de retorno utilizado sea 0, puedes usar el operador de coma y '#define FOO (arg) (foo (arg), 0)' – Eregrith