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 .