Вызов другой функции при выходе main()

Можно ли вызвать дополнительную функцию, когда main() выйдет в C?

Спасибо!

Ответ 1

Вы можете регистрировать функции для запуска после main с помощью функции atexit.

MSDN имеет красивый краткий пример, как это делается. В принципе, функции, зарегистрированные в atexit, выполняются в обратном порядке, когда они были зарегистрированы.

Ответ 2

Попробуйте функцию atexit():

void myfunc() {
    /* Called when the program ends */
}

int main( int arc, char *argv[] ) {
    atexit( myfunc );
    ...
    return 0;
}

Ответ 3

Отличные вопросы и ответы. Просто примечание. Злоупотребление подобной функцией в библиотеках Delphi приводило к приложениям, которые досадно медленно закрываются.

Ответ 4

Хотя atexit() является стандартом для регистрации функции, выполняемой при завершении процесса, GCC предоставляет деструктор атрибут функции * который вызывает автоматическую вызов функции при завершении main() или exit().

void __attribute__ ((destructor)) my_fini(void);

* Специфический GCC