define을 사용한 version 처리.

원민수 2008.02.09 03:44 조회 수 : 15026 추천:127

안녕하세요. 여태까지 항상 C 언어를 가지고 계속 공부해왔지만, 이러한 것을 볼 때마다 드는 생각이 정말 모르는 것이 너무 많구나 라는 생각들이 드네요.. 다름이 아니라, 요즘 fuse(Filesystem in Userspace)를 보면서 version에 따른 structure 처리를 보고 잘 사용하면, 좋은 거 같아서 이렇게 올립니다. 사실 preprocessing을 가지고 상당한 테크닉들 많이 존재하기 때문에 많은 분들이 아실거 같긴 하지만, 혹시나 해서 올립니다. ^^

library 구현에 있어서, 사용되는 함수의 기능 등의 확장으로 인해서 함수 정의 뿐 아니라 원형 그리고 data structure도 바뀌는 경우가 종종 발생할 거라고 생각됩니다. 이러한 경우에 #define을 사용해서 library의 version에 따라 다르게 처리하면, old 버전을 사용하던 어플리케이션 등에 대한 scalability를 제공함에 있어서 좀더 좋을 것입니다.

fuse같은 경우에는 다음과 같이 처리하도록 되어 있더군요.
filesystem의 file_operations와 같은 기능을 하는 fuse_operations 라는 구조체를 사용함에 있어서 old 버전과 new 버전을 처리함에 있어서
#ifdef FUSE_VERSION == 21
#define fuse_operations fuse_operations_compat2
#else
#define fuse_operations fuse_operations_compat22
#endif

이런식으로 처리하면, compile time에 -DFUSE_VERSION에 지정함에 따라 old structure를 사용해서 이미 개발된 프로그램도 수정 없이 계속 사용가능하기 때문에 library 개발시에는 좋은 테크닉인거 같습니다.

위에 제가 적어놓은 코드들은 간략히 적어 놓은 것이기 때문에, 좀더 자세히 보고 싶은신 분들은 fuse develop library를 설치하신 후에 fuse.h와 실제 data structure가 정의 되어 있는 fuse_compat.h를 보시면 될거 같습니다.

그럼 늦었지만, 남은 연휴 잘 보내시고요. 모두들 새해 복 많이 받으세요~!.
XE Login