Reset_AVR(); sembra scattare arbitrariamente ma comunque non fa il reset

Vi chiedo un chiarimento su questa #define (che sto usando, grazie!)

#define softReset() do {wdt_enable (WDTO_30MS); while(1) {}} while (0)

Mi è chiaro il while(1) interno (blocca in un ciclo infinito finché non scatta il Whatchdog), ma perché racchiuso nel do {...} while (0) esterno visto che se lo tolgo mi sembra che tutto funzioni regolarmente?

#define softReset() {wdt_enable (WDTO_30MS); while(1) {}}