전에 설명한 c 로 만든 플러그인 인터페이스 문서에 있는 함수 포인터를 활용하면

https://gall.dcinside.com/mgallery/board/view/?id=github&no=7138&search_head=30&page=1

더욱 그럴싸하게 됨. 결국엔 glib 비스므리하게 됨. 이런 짓을 왜하냐면 호환성 때문이죠.

다양한 플랫폼(BSD 유닉스, 리눅스, MS윈도우, 애플, 안드로이드)에서 약간만 수정해서 작동되길 바라고,

다양한 동적 언어(파이썬, 루비, 자바스크립트 등)에서 작동되길 바라면 c 를 이렇게라도 사용하게 됩니다.

c를 사용하여 라이브러리를 만들면 정말 다양한 환경에서 사용될 수 있습니다.


#include <stdio.h> #include <stdlib.h> #include <string.h> enum { TIAN_OBJECT, TIAN_PLUGIN }; typedef struct _TianObject { int type; int ref_count; } TianObject; typedef struct { /* TianObject 라는 구조체가 멤버로 있음. 포인터가 아니라서 union 비스므리하게 접근 가능 */ /* 이런 식의 oop 말고 linked list 사용하는 방법도 있겠으나, 타인이 이해하기 어렵다고 봄 */ /* 아래와 같은 방법은 c 문법만 알아도 이해 가능 */ TianObject base; char *name; } TianPlugin; TianPlugin *tian_plugin_new (char *name) { TianPlugin *plugin = calloc (1, sizeof (TianPlugin)); plugin->name = strdup (name); /* 이런 방법으로 접근 가능 glib 에서 흔히 보던 방법 TianObject *object = (TianObject *) plugin; object->type = TIAN_PLUGIN; object->ref_count++; */ plugin->base.type = TIAN_PLUGIN; plugin->base.ref_count++; return plugin; } int main (int argc, char **argv) { TianPlugin *plugin = tian_plugin_new ("name"); puts (plugin->name); return 0; }