– 매일같이 잊어버려서 아예 기록을 해둡니다…
왜 C에서는 #define some_func() do { … } while(0) 와 같이 매크로를 정의하는가.. 그 이유는,
if (…)
some_func();
else
other_func();
가 잘 번역되게 하기 위해서입니다. 만약 block statement를
#define bad_func() { … }
로 정의한다면, 자연스러워 보이는 다음의 코드는
if (…)
bad_func();
else
other_func();
실제로 다음과 같이 번역됩니다.
if (…)
{ … };
else
other_func();
당연히 error죠?
그러나 EC++에서는 type safe하고, 실행 문맥에 따라 실행 내용이 달라지는 매크로보다는 inline 또는 const를 사용하라고 권하고 있습니다. 그래서 결국은 C가 우세한 임베디드나 커널에서 많이 나오는 idiom.