do ~ while (0) を抽象化(gccは複文を式化することができるので、do ~ while (0)は必要ないため)