커널에 do while 매크로가 있을까?
리눅스 커널을 보면 아래와 같이 do {} while 매크로가 있다.

do ~ while로 매크로 함수를 사용하는 두가지 이유가 있다.
첫째는 {} 을 통해서 중복이름을 막는다.
매크로 함수는 말그대로 컨트롤 C+V효과를 동일한 효과가 있어 중복이름이 있을때
undefined behavior이 된다. 이를 방지 하기 위해 블록을 사용한다.
둘째 ; 을 강제화한다.
여러개의 함수를 define을 하게되면 ;을 포함해서 아래와 비슷한 매크로함수를 만들게 되는데
#define __MAX_FN {a();b();}
이는 매크로 함수를 사용할때 ;을 사용안해도 된다. 하지만 do while인 경우에는 ;을 강제화 할수 있다는 장점이 있다.
이를 방지하기 위해 gcc에서두 아래와 같은 키워드를 만들었지만 리누스 토발즈님은 종속성을 매우 싫어하여 이를 사용안할거같다.
https://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Statement-Exprs.html