C · Avançado · Português · Técnico
do while zero
Idioma que envolve o corpo de uma macro em do { } while (0), para ela se comportar como um único comando, aceitando o ponto e vírgula final.
Onde usar
Sem ele, uma macro com dois comandos quebra num if sem chaves: só o primeiro fica condicionado. Aparece em quase toda macro de várias linhas, como as do kernel Linux.
Em código
#define LIMPA(p) do { \
free(p); \
(p) = NULL; \
} while (0)
if (x)
LIMPA(buf);
else
puts("sem buf");Exemplos
Envolva a macro no do while zero para ela funcionar dentro de um if.
Sem o do while zero, esse else dá erro de sintaxe.
Cuidado
Usar só chaves { }: o ponto e vírgula depois da macro quebra um else seguinte.
Sinônimos
do-while(0)