티스토리 뷰

do {...} while(0) 문장의 사용과 회피


가끔 남의 code를 들여다보면 아래와 같은 문장을 만나곤 한다.
#define XXX do {...} while(0)


필요 없어 보이는 이 do while에 대한 내용은 아래 reference에서 많이 찾아볼 수 있다.
https://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Statement-Exprs.html#Statement-Exprs
http://blog.dasomoli.org/220


그러나, 가끔 이 do while 문장이 Compiler의 Code Optimization option과 섞여서 의도치 않은 동작을 할 수 있다. 내가 만난 case는 MIPS core가 들어간 회사에서 개발 중인 settop에서 발생했다. 개발용 ubuntu에서는 발생하지 않으나 특정 MIPS의 gcc에서 발생하고 있었다.


이를 회피하는 방법은 최적화를 피하도록 하는 방법이다.


이때는 특정 계산을 하는 형태일 때가 있고, 결과값이 원하지 않는 형태일 것이다. 그리고 이를 회피하는 방법으로 해당 define에 포함될 변수를 volatile로 선언하면 최적화를 회피하게 된다.


volatile 관련해서는 아래 링크 참조.
http://www.keil.com/support/man/docs/armcc/armcc_chr1359124222941.htm
http://semilink.tistory.com/15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함