리눅스 커널에서 do while(0)이 자주 보이는 이유

리눅스 커널을 분석하다 보면, 아래와 같은 코드가 자주 나온다

#include foo do
{
      bla1
      bla2
} while(0);

do ~ while(0) 코드는 조건이 무조건 0이기 때문에 아무런 의미가 없다.

이런 코드를 사용하는 이유는 아래와 같은 경우 때문이다

if (
test == 0 )
{
    run();
}else
    foo

이런 코드를 넣게 되면, 첫번째 라인인 bla1 은 else의 컨디션에 영향을 받지만,

두번째 라인인 bla2는 항상 실행되는 코드가 되어버린다.

이런것을 막기 위해서 의미 없는 do ~ while( 0 ) 으로 막아주는 것이다.

사실 의미없이 { ~~ } 이렇게 중괄호로 막아줘도 되는데,

이렇게 막으면 몇몇 컴파일러에선 warning을 출력하기 때문에 사용하지 않는다고 한다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중