C and C++

[C] C에서 생성자 소멸자 흉내기

개발새발 2020. 10. 11. 10:50
반응형

C언어를 이용하여 라이브러리를 만들거나 프로그램 시작/종료시 메모리를 관리하고 싶을 때 아래의 코드에서처럼

__attribute__((constructor))__attribute__((destructor)) 사용하면 유용할 것 같다.

단점으로는 gcc컴파일에서만 활용할 수 있다는 점이다.

 

아래의 코드는 실행결과 처럼 constructor -> main -> AAA() - > BBB() -> CCC() -> main -> destructor 순으로 실행된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
 
void __attribute__((constructor)) constructor(void) {
    printf("constructor\n");
}
 
void __attribute__((destructor)) destructor(void) {
    printf("destructor\n");
}
 
void AAA(void) {
    printf("AAA\n");
}
 
void BBB(void) {
    printf("BBB\n");
}
 
void CCC(void) {
    printf("ccc\n");
}
 
int main(int argc, const char * argv[]) {
    printf("Main Start\n");
    AAA();
    BBB();
    CCC();
    printf("Main End\n");
    return 0;
}
 
cs

 

실행결과

constructor

Main Start

AAA

BBB

ccc

Main End

destructor

반응형