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를 보시면 될거 같습니다.

그럼 늦었지만, 남은 연휴 잘 보내시고요. 모두들 새해 복 많이 받으세요~!.
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 강좌, 팁, 정보등에 대해 올리는 게시판입니다. woos 2016.04.09 246
129 Pro Git 2장, 3장 요약입니다. 아폴로 2013.11.05 52110
128 포토샵 웹버전입니다. [1] 강진성 2010.05.14 40685
127 맥에서 리눅스 커널 빌드하기 [2] K 2013.06.30 24819
126 #pragma에 관련해서.. [2] 원민수 2006.07.19 20782
125 kernel 2.6의 kzalloc함수 (원민수 씀) 백창우 2007.02.23 19337
124 태훈님에 이어. ARM kernel 참고자료 백창우 2007.11.05 19014
123 리눅스 커널 스터디 참고자료 (x86) [4] 리누즈박 2013.05.06 18396
122 누가 나를 호출했는지 찾기 + 포인터를 심볼 이름으로 변환하여 출력하기 [1] 지현구 2007.02.27 17863
121 systemtap 관련 간단한 소개입니다. 남용우 2007.11.06 17057
120 허접 영어 사전입니다. [3] 백창우 2008.04.22 16092
» define을 사용한 version 처리. 원민수 2008.02.09 15026
118 여기는 팁, 기타 정보를 올리는 곳입니다. 백창우 2006.06.05 14751
117 커널 분석용 vim 플러그인 설치하기 (Rev.4) [21] 리누즈박 2013.06.30 13973
116 막강 디버깅 매크로 DM_PRINT() [4] file 배상경 2010.11.23 12045
115 if문에 사용하는 likely와 unlikely 함수의 용도 [1] 아폴로 2014.03.05 11173
114 조금은 묵직한 시스템, 뇌감시장치 김성현2 2011.11.17 10585
113 리눅스 커널 코딩 스타일입니다. [1] 아폴로 2013.09.13 10147
112 xen 4.1 설치 방법(우분투 11.04) [2] 이상철 2012.11.14 10109
111 Kernel 소스코드 github에 복사하는 법 [6] 리누즈박 2013.06.16 9836
110 돈되는 이야기?! 삼성 손가락 혈압계 [1] 김성현2 2011.10.20 9493
XE Login