Dlaczego warto używać bezsensownych instrukcji do-while i if-else w makrach?

W wielu makrach C / C ++ widzę kod makra zawinięty w coś, co wydaje się bez znaczeniado while pętla. Oto przykłady.

#define FOO(X) do { f(X); g(X); } while (0)
#define FOO(X) if (1) { f(X); g(X); } else

Nie widzę codo while to robi. Dlaczego po prostu nie napisać tego bez niego?

#define FOO(X) f(X); g(X)

questionAnswers(11)

yourAnswerToTheQuestion