The exit function is part of the c standard library , and is defined in the stdlib.h header .
The stdlib.h define some types , macros , and it contains general utility functions , to perform numerical conversion , generate random numbers , perform sorting , allocate memory , or interact with the environment.
The exit function is used to interact with the environment . It has the following signature .
void exit(int status);
The exit function is used to normally exit a program , it starts by calling all the functions which were registered with the atexit function .
The atexit function , takes a pointer to a function with no argument or return type . It returns 0 if the function was successfully registered to be called at program termination , when the exit function is called , or a non zero value if not . The atexit function has the following signature :
int atexit(void (*func) (void) );
After calling the functions registered with the atexit function in reverse registration order , the exit function closes all open streams , causing them to be flushed . The files created by the tmpfile function are removed .
The tmpfile function is part of the stdio.h header , and is used to create temporary files , removed when closed , or upon program normal termination .
Next , if the passed status argument is 0 , or the integer valued macro : EXIT_SUCCESS , defined in the stdlib.h header , this means that a success status must be passed to the host environment , as such an implementation defined form of the success status , is returned to the hosting environment , to whom control is relinquished .
/* exit_success.c */
#include <stdlib.h>
int main ( int argc , char* argv[] )
{
exit(0);
/* Normally exit the program
with success status .
exit(EXIT_SUCCESS) could
also have been used .*/
}
/*
$ cc exit_success.c
# compile the program .
$ ./a.out
# execute the program .
$ echo $?
# check the exit status of
# the last program .
0
# The exit status of the last
# program is 0 , which is
# success .*/
If the passed status argument , is the integer valued macro : EXIT_FAILURE , defined in the stdlib.h header , then the exit function , returns an implementation defined form , of the failure status to the hosting environment , to whom control is passed .
/* exit_failure.c */
#include <stdlib.h>
int main ( int argc , char* argv[] )
{
exit(EXIT_FAILURE);
/* Normally exit the program
with failure status .*/
}
/*
$ cc exit_failure.c
# compile the program .
$ ./a.out
# execute the program .
$ echo $?
# check the exit status of
# the last program .
1
# It is 1 , as such
# the exist status
# is failure .*/
For any other passed status values , the returned exit status , to the host environment , is implementation defined .
/* exit_status_implementation.c */
#include <stdlib.h>
int main ( int argc , char* argv[] )
{
exit(-1);
/* Normally exit the program ,
passing to the exit function
an exit status of -1 .
An implementation defined , exit
status is returned to
the hosing environment .*/
}
/*
$ cc exit_status_implementation.c
# compile the program .
$ ./a.out
# execute the program .
$ echo $?
# check the exit status of the
# last program .
255
# The exist status is 255 .*/
The behavior of multiple calls to the exit function is undefined .
