С технической точки зрения, он запускает его один раз, так как он проверяет (и не проходит проверку) после того, как один раз запускается.
Кроме этого, он используется в макросах.Например:
#define blah(a) \
something(1); \
something(2)
if(a)
blah(4);
else
blah(19);
приведет к этому:
...
if(a)
something(1); something(2);
else
something(1); something(2);
, что не является допустимым синтаксисом, так как else больше не является частью оператора if.То, что вы можете сделать, это:
define blah(a) \
do {
something(1); something(2);
} while(0)
...
, который будет преобразован в один оператор в блоке if:
if(a)
do { something(1); something(2); } while(0);
else
...