Posible duplicado:
Sentencias Do-While y if-else en macros C / C ++
Tengo las siguientes macros:
#define FREE1(x) do { free(x); x = NULL; } while (0) #define FREE2(x) free(x); x = NULL
¿Cuál es la diferencia entre estas macros?
Considere el siguiente ejemplo
if (some_test) FREE2(x);
se expande a
if (some_test) free(x); x = NULL; // happens regardless of value of some_test
Podría ser más satisfactorio resolver esto usted mismo.
Insinuación:
if(y) FREE2(x);