Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 main() 함수 전후로 실행되는 함수 만드는 방법

C 프로그래밍에서 main() 함수가 실행되기 전과 후에 특정 함수를 자동으로 호출해야 하는 경우가 있습니다. 예를 들어 프로그램 시작 전에 초기화 작업을 수행하거나, 종료 후에 리소스 정리(clean-up) 작업을 처리할 때 유용합니다.

이를 구현하려면 GCC에서 제공하는 __attribute__ 기능을 활용하면 됩니다. 두 가지 속성이 사용됩니다.

  • constructor: main() 함수가 실행되기 이전에 해당 함수가 호출됩니다.
  • destructor: main() 함수가 종료된 이후에 해당 함수가 호출됩니다.

예제 코드

#include<stdio.h>
void before_main() __attribute__((constructor));
void after_main() __attribute__((destructor));
void before_main() {
   printf("This is executed before main.\n");
}
void after_main() {
   printf("This is executed after main.");
}
main() {
   printf("Inside main\n");
}

실행 결과

This is executed before main.
Inside main
This is executed after main.

동작 원리 설명

위 코드에서 before_main() 함수에는 constructor 속성이 지정되어 있으므로, 프로그램이 시작되면서 main()보다 먼저 실행됩니다. 반면 after_main() 함수에는 destructor 속성이 지정되어 있어 main()의 실행이 모두 끝난 뒤에 호출됩니다.

따라서 출력 결과를 보면 "Inside main" 메시지 앞뒤로 각각 초기화 함수와 정리 함수가 실행된 순서를 확인할 수 있습니다. 이러한 기법은 로깅 초기화, 전역 리소스 할당 및 해제 등 다양한 상황에서 활용될 수 있습니다.