GCC 의attribute__ ((constructor) 와attribute__ ((destructor))

최근 openwrt 소스 코드 의 netifd 프로 세 스 구현 을 배우 고 있 습 니 다. 소스 코드 를 다운로드 한 후 main 함수 에서 코드 를 분석 하기 시 작 했 습 니 다.나 는 main 함수 에서 몇 개의 전체적인 데이터 구 조 를 사용 하 는 것 을 보 았 으 나 main 함수 가 그들 에 게 초기 화 를 하지 않 고 직접 사용 하 는 것 은 나 에 게 있어 서 상당히 기괴 하 다.나 는 코드 에서 이 몇 개의 전역 구조의 초기 화 함 수 를 검색 하 였 으 나, 아무 도 그들 을 호출 하지 않 았 다. 나중에 이러한 초기 화 함 수 는 모두 에 의 해attribute__ (constructor) 수식 은 이름 에서 알 수 있 듯 이 이것 은 일련의 구조 함수 이다. 나 는 순간 세상 이 너무 좋다 고 느 꼈 다. 원래 main 함수 전에 뭔 가 를 할 수 있 었 다.
다음은 간단 한 예 를 통 해 gcc 의 를 소개 합 니 다.attribute__ (constructor) 속성의 역할.
gcc 함수 설정 허용attribute__ ((constructor) 와attribute__ (destructor) 두 가지 속성 은 말 그대로 수 정 된 함 수 를 구조 함수 나 석조 함수 로 하 는 것 이다.프로그래머 는 다음 과 같은 방식 으로 함수 에 이 속성 을 설정 할 수 있 습 니 다.
void funcBeforeMain() __attribute__ ((constructor));
void funcAfterMain() __attribute__ ((destructor));
함수 이름 앞 에 놓 을 수도 있 습 니 다:
void __attribute__ ((constructor)) funcBeforeMain();
void __attribute__ ((destructor)) funcAfterMain();
(constructor) 속성 을 가 진 함 수 는 main () 함수 전에 실 행 됩 니 다. (destructor) 속성 을 가 진 함 수 는 main () 이 종 료 될 때 실 행 됩 니 다.
다음은 간단 한 예 를 들 어 보 겠 습 니 다.
#include <stdio.h>

void
__attribute__((constructor)) funcBeforeMain()
{
    printf("%s...
", __FUNCTION__); } void __attribute__((destructor)) funcAfterMain() { printf("%s...
", __FUNCTION__); } int main() { printf("main...
"); return 0; }

컴 파일 및 실행 프로그램:
[root@ubuntu workshop]# gcc constructor.c -o constructor [root@ubuntu workshop]# ./constructor  funcBeforeMain... main... funcAfterMain...
프로그램 실행 결 과 를 통 해 알 수 있 듯 이 constructor 속성 을 설정 한 funcBeforeMain () 함 수 는 프로그램 이 main () 함수 에 들 어가 기 전에 호출 되 었 고 destructor 속성 을 설정 한 funcAfterMain () 함 수 는 main () 함수 가 돌아 온 후에 호출 되 었 습 니 다.

좋은 웹페이지 즐겨찾기