표준 유틸리티 라이브러리

표준 유틸리티 라이브러리는 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");
}

이 코드를 실행하면

Untitled

처럼 프로그램이 종료될때 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.");
}

Untitled

우리가 설정한 code2를 반환하며 프로세스는 종료된다. 아래의 puts(”~”)문장은 절대로 실행되지 않는다.

qsort()도 유틸리티 라이브러리에 포함되어 있는 함수이다.