표준 유틸리티 라이브러리
표준 유틸리티 라이브러리는 stdlib.h
를 말한다. 여기 있는 함수들 몇가지를 소개하겠다.
atexit()
은 프로그램이 종료될때 어떤 함수를 호출할지 결정해주는 함수이다. 즉 함수포인터를 사용하는 함수임.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void goodbye();
void thankyou();
int main()
{
printf("purchased?\\n");
if (getchar() == 'y')
atexit(thankyou);
while (getchar() != '\\n') {};
printf("goodbye message ? \\n");
if (getchar() == 'y')
atexit(goodbye);
}
void goodbye()
{
printf("goodbye\\n");
}
void thankyou()
{
printf("thankyou\\n");
}
이 코드를 실행하면
처럼 프로그램이 종료될때 atexit()
에 등록된 함수 포인터가 호출된다. 즉 atexit()
은 인자로 들어온 함수 포인터의 목록을 갖고 있다가, 프로세스가 종료될때 해당 목록의 포인터들을 순서대로 실행한다.
이를 통해 런타임동안 프로세스 종료시 어떤 함수를 실행할지 결정할 수 있다.
exit()과 관련해서 문법하나를 소개하겠다. 비주얼스튜디오 C에선 지원 안함.
함수 한정자(Function specifier)중에 _Noreturn
이란게 있다. 이 한정자가 붙은 함수는 실행 종료 후에 다시 메인쓰레드(main)으로 돌아가지 않고, 프로세스를 종료해버린다.
#include <stdlib.h>
#include <stdio.h>
#include <stdnoreturn.h>
**_Noreturn** void stop_now(int i)
{
if(i > 0) eixt(i);
//exit(i)
}
int main(void)
{
puts("preparing to stop...");
stop_now(2);
puts("this code is never executed.");
}
우리가 설정한 code2를 반환하며 프로세스는 종료된다. 아래의 puts(”~”)
문장은 절대로 실행되지 않는다.
qsort()도 유틸리티 라이브러리에 포함되어 있는 함수이다.