Différence entre les macros avec et sans utiliser do… while

Dupliquer possible:
Instructions Do-While et if-else dans les macros C / C ++

J’ai les macros suivantes:

#define FREE1(x) do { free(x); x = NULL; } while (0) #define FREE2(x) free(x); x = NULL 

Quelle est la différence entre ces macros?

Considérez l’exemple suivant

 if (some_test) FREE2(x); 

s’étend à

 if (some_test) free(x); x = NULL; // happens regardless of value of some_test 

Il serait peut-être plus satisfaisant de comprendre cela vous-même.

Allusion:

 if(y) FREE2(x);