
Envoyé par
LittleWhite
Si on veut faire dans la macro ... ça sera donc du genre:
Si l'on veut être "ultime" et blinder à tous les niveaux, ça va plutôt donner :
#define FREE(x) do { if (x) { free(x); x = NULL; } } while (0)
Là, t'es blindé sur les conditions du free, et en plus sur le fait de se servir de la macro au même titre qu'une instruction... 
Pour protéger au niveau de l'interprétation multiple du "x", il faudrait passer par une fonction inline intermédiaire qui assurerait l'interprétation unique du paramètre, mais là, ce n'est plus de la macro "pure".
Mais bon, on digresse : je l'ai déjà dit, mais l'important, c'est de retenir qu'en embarqué, il ne faut pas présupposer que le comportement du compilateur et/ou de la CLib est identique à ce que l'on trouve sur le PC.
Partager