do
{
// do something
} while (false)
1번만 실행되는 코드를 저렇게 묶어놨길래 scope 때문에 저랬나 싶었다.
do
{
if (A)
{
break;
}
if (B)
{
break;
}
} while(false)
// do something finally
보니깐 goto 대신 scope 를 빠져 나가기 위해서 사용하는 스타일이었다.
#define DO_SOMETHINGS(X) \
DO_FUNC_A(X); \
DO_FUNC_B(X);
DO_SOMETHINGS(a); // DO_FUNC_A -> DO_FUNC_B
// if true, DO_FUNC_A -> DO_FUNC_B -> DO_FUNC_C
// if false, DO_FUNC_B -> DO_FUNC_C ????
if (IS_TRUE(a))
DO_SOMETHINGS(a);
DO_FUNC_C(a);
do...while(false) 를 사용하는 또 다른 용도로는 if 문 같은 곳에서 의도치 않은 흐름을 막을 수 있다. 위와 같은 경우 if 문에서 false 일 경우 의도치 않게 B -> C 가 호출된다.
#define DO_SOMETHINGS(X) \
do \
{ \
DO_FUNC_A(X); \
DO_FUNC_B(X); \
} while(false);
위와 같은 상황을 피하고자 do while(false) 로 묶어서 선언한다.
참고 :
https://stackoverflow.com/questions/2314066/do-whilefalse
728x90