##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# atexit

From cppreference.com
< c‎ | program

Defined in header `<stdlib.h>` |  |
int atexit( void (*func)(void) ); |  |

Registers the function pointed to by `func` to be called on normal program termination (via exit() or returning from `main()`). The functions will be called in reverse order they were registered, i.e. the function registered last will be executed first.

The same function may be registered more than once.

`atexit` is thread-safe: calling the function from several threads does not induce a data race.

The implementation is guaranteed to support the registration of at least 32 functions. The exact limit is implementation-defined.

### [edit] Parameters

func | - | pointer to a function to be called on normal program termination

### [edit] Return value

​0​ if the registration succeeds, nonzero value otherwise.

### [edit] Example

Run this code

    #include <stdlib.h>
    #include <stdio.h>

    void f1(void)
    {
        puts("pushed first");
    }

    void f2(void)
    {
        puts("pushed second");
    }

    int main(void)
    {
        atexit(f1);
        atexit(f2);
    }

Output:

    pushed second
    pushed first

### [edit] References

- C11 standard (ISO/IEC 9899:2011):

  - 7.22.4.2 The atexit function (p: 350)

- C99 standard (ISO/IEC 9899:1999):

  - 7.20.4.2 The atexit function (p: 315)

- C89/C90 standard (ISO/IEC 9899:1990):

  - 4.10.4.2 The atexit function

### [edit] See also

at_quick_exit (C11) | registers a function to be called on `quick_exit` invocation (function) [edit]
C++ documentation for atexit

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/program/atexit&oldid=87827"