http://bbs.kldp.org/viewtopic.php?t=69993&postdays=0&postorder=asc&highlight=void+%2Athis&start=40
요즘 KLDP에서 C를 C++처럼 사용하는 법에 대해서 토론중이다.
(OOP, 프레임웍, 패턴이라는 단어들이 사용하면서 긴장을 풀고 살았다라는 생각이 드는 것은 무엇일런지..
초심의 마음으로 다시 접근해야 겠다.)
#include <stdio.h>
struct _my_str;
void inc_one(struct _my_str *);
void dec_one(struct _my_str *);
typedef void (*void_func) (struct _my_str *);
typedef struct _my_str {
int iLen;
void_func inc;
void_func dec;
} my_str;
my_str* init_my_str() {
my_str *new_my_str = (my_str*) malloc (sizeof(my_str));
new_my_str->iLen = 0;
new_my_str->inc = &inc_one;
new_my_str->dec = &dec_one;
return new_my_str;
}
void inc_one(my_str *my) {
my->iLen++;
}
void dec_one(my_str *my) {
my->iLen--;
}
main() {
my_str *a = init_my_str();
printf("a->iLen = %d\n", a->iLen);
a->inc(a);
printf("a->iLen = %d\n", a->iLen);
}
함수포인터를 이용하여 구현한 것으로서, 자신의 객체를 내부에서 구현하고 참조하는 C++, java의 실제 내부 구현이기도 하다.
전역변수를 쓰지 않음으로서 메모리를 아끼고, 마치 객체처럼 편리하게 쓰일 수 있다. OOP의 encapsulation처럼 쓰일 수 있는 장점이 있다. 물론 structure의 변수들을 모두 접근한다는 부분이 걸리지만 말이다.
Herb Sutter 님의 Exceptional C++ 에서는 다음과 같이 c를 이용하여 OOP의 편리함을 이용하고 있다.
List of "foo.c" :
List of "bar.c" :
List of "bar.h" :
요즘 KLDP에서 C를 C++처럼 사용하는 법에 대해서 토론중이다.
(OOP, 프레임웍, 패턴이라는 단어들이 사용하면서 긴장을 풀고 살았다라는 생각이 드는 것은 무엇일런지..
초심의 마음으로 다시 접근해야 겠다.)
#include <stdio.h>
struct _my_str;
void inc_one(struct _my_str *);
void dec_one(struct _my_str *);
typedef void (*void_func) (struct _my_str *);
typedef struct _my_str {
int iLen;
void_func inc;
void_func dec;
} my_str;
my_str* init_my_str() {
my_str *new_my_str = (my_str*) malloc (sizeof(my_str));
new_my_str->iLen = 0;
new_my_str->inc = &inc_one;
new_my_str->dec = &dec_one;
return new_my_str;
}
void inc_one(my_str *my) {
my->iLen++;
}
void dec_one(my_str *my) {
my->iLen--;
}
main() {
my_str *a = init_my_str();
printf("a->iLen = %d\n", a->iLen);
a->inc(a);
printf("a->iLen = %d\n", a->iLen);
}
함수포인터를 이용하여 구현한 것으로서, 자신의 객체를 내부에서 구현하고 참조하는 C++, java의 실제 내부 구현이기도 하다.
전역변수를 쓰지 않음으로서 메모리를 아끼고, 마치 객체처럼 편리하게 쓰일 수 있다. OOP의 encapsulation처럼 쓰일 수 있는 장점이 있다. 물론 structure의 변수들을 모두 접근한다는 부분이 걸리지만 말이다.
Herb Sutter 님의 Exceptional C++ 에서는 다음과 같이 c를 이용하여 OOP의 편리함을 이용하고 있다.
List of "foo.c" :
코드: |
#include "bar.h" int main() { BAR *bar = create_bar(); use_bar(bar); remove_bar(bar); return 0; } |
List of "bar.c" :
코드: |
#include "bar.h" struct BAR_ { int somedata1; int somedata2; void *memory; }; typedef struct BAR_ BAR; BAR *create_bar() { static BAR b; return &b; } void use_bar(BAR *) { } void remove_bar(BAR *) { } |
List of "bar.h" :
코드: |
struct BAR_; struct BAR_ *create_bar(); void use_bar(struct BAR_ *); void remove_bar(struct BAR_ *); |
'c or linux' 카테고리의 다른 글
ifdown ifup ifconfig (0) | 2006.11.17 |
---|---|
How to be a Programmer : A short.... (0) | 2006.07.20 |
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> uCOS-ii V2.51 8051 에 포팅하기 (0) | 2006.04.19 |
좋은 구조체 리턴 함수 (0) | 2006.04.15 |
&, && 및 우선순위 주의 (0) | 2006.03.28 |