можно ли отменить регистрацию функции обработчика выхода???
void exit_handler_1()
{
printf("in first exit handler\n");
}
int main()
{
if(atexit(exit_handler_1())
{
perror("error");
}
return 0;
}
можно ли отменить регистрацию функции обработчика выхода???
void exit_handler_1()
{
printf("in first exit handler\n");
}
int main()
{
if(atexit(exit_handler_1())
{
perror("error");
}
return 0;
}
Это невозможно.
Почему бы просто не зарегистрировать одну функцию atexit
и иметь глобальную переменную для этой функции, чтобы иметь возможность решать, что от нее требуется.
Вы не можете отменить регистрацию atexit
функций, но можете отключить свои собственные функции.
static int disable_my_exit_handler = 0;
void exit_handler_1()
{
if ( disable_my_exit_handler )
return;
printf("in first exit handler\n");
}
int main( void )
{
if ( atexit( exit_handler_1 ) )
{
perror("error");
}
disable_my_exit_handler = 1;
return 0;
}
atexit
также позволяет регистрировать функцию несколько раз. Чтобы отменить регистрацию функции, несуществующий unregister_atexit
должен разрешать не только функцию, но и позицию, с которой вы хотите ее отменить. Это быстро приводит к раскрытию интерфейса стека, используемого для хранения функций, зарегистрированных atexit
.