#unix
#unix
Вопрос:
Я знаю, что когда адрес функции передается atexit
функции,
функция освобождается.
#include <stdlib.h>
int atexit(void (*func) void));
Однако, какова цель использования atexit
функции?
Относится ли само словесное значение ‘exit’ к atexit
функции?
Ответ №1:
atexit
будет использоваться для некоторого кода, который вы хотите выполнить при завершении работы приложения, независимо от того, откуда оно было запущено. Одним из примеров может быть регистратор для всего приложения. Вы бы вызвали atexit(flush_log)
, чтобы при выходе из приложения журнал был сброшен, и разработчику не пришлось бы помнить о его сбросе.
Ответ №2:
Да, atexit
связано с exit
.
exit
может вызывать функции, которые автоматически вызываются перед завершением программы. Эти функции называются обработчиками выхода и регистрируются путем вызова atexit
функции.
#include<stdio.h>
main(void) {
atexit(func);
}
func(void)
{
...
}
Ответ №3:
#include<stdlib.h>
int atexit(void (*func)(void));
В приведенном выше объявлении говорится, что мы передаем адрес функции в качестве аргумента atexit
. Когда вызывается эта функция, ей не передаются никакие аргументы и не ожидается, что она вернет значение. Функция exit вызывала эти функции в порядке, обратном их регистрации. Каждая функция вызывается столько раз, сколько они зарегистрированы.