# 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.

### Parameters

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

### Return value

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

### 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

### 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

### See also

at_quick_exit (C11) | registers a function to be called on `quick_exit` invocation (function)

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