일단 이 바보같은 생각은 SQL 쿼리 문장에서는 Alias가 동작을 하는데 C 프로그래밍에서도 그렇게 해 보믄 좋지 않을까 라는 생각에서 시작되었다.
풀어서 쓰면 좀 뭔가 있어 보이긴 하는데 실제로는 타이핑을 치키가 귀찮아서, 혹은 copy & paste가 귀찮아서 우리의 까막군을 닥달하여 알아 낸 내용이다.
예를 들자면 다음과 같다.
memcpy(buff, &pCompletePacket->data[jmpoffset], arglen);
위와 같은 구절에서 &pCompletePacket->data[jmpoffset] 라는 항목을 계속해서 써야 하는데 이것을 치키가 귀찮아서 특정한 구절로 대체 해 버리고 싶을 경우에는 다음과 하면 된다.
#define _HOPI_DTEST_ pCompletePacket->data[jmpoffset]
그리고 실제 코드는 이렇게 변경하면 된다.
memcpy(buff, &_HOPI_DTEST_, arglen);
어쨌건 타이핑을 하는 것이 줄어들었다.
대신에 이 방법을 사용하려면 반드시 해당 내용에 대한 주석문을 철저하게 달아놓아야 따로 코드를 보는 사람이 있을 경우 쓰바쓰바 욕을 하지 않게 만들 수 있을 것이라 할 수 있다.
응용버젼이다.
#define AAA(x) pCompletePacket->data[x]
대충 이해가 가지 않는가? 위에서 나온 jmpoffset이라는 변수를 변경해 가면서 사용할 수 있다.
즉 AAA(1) 하면 끝날 수 있을 듯..
마지막 응용이다.
#define AAA(param) pCompletePacket->##param[jmpoffset]
이렇게 할 경우에는 대충 이해가 가지 않는가? 내용을 넣게 되면 그 내용이 그대로 전달되게 된다.
뒷걸음질 치다가 땅에 떨어져 있는 돈뭉치 하나 건진 기분이다. 으흐흐
'생활속의 프로그램'에 해당되는 글 51건
- 2008.01.30 매크로.. 매크로..