Рассмотрим второй вариант завершения программы.
Для завершения программы без вызова обработчиков, зарегистрированных с помощью функции atexit, можно использовать функцию _Exit. Данная функция задекларирована следующим образом:
void _Exit(int).
В качестве параметра функция принимает код возврата, с которым программа и завершается.
Как я уже упоминал: функции-обработчики не вызываются. Рассмотрим пример кода:
int k=0;
void exit1(){
printf("At function exit1 %d\n",k++);
}
void exit2(){
printf("At function exit2 %d\n",k++);
}
void exit3(){
printf("At function exit3 %d\n",k++);
}
void exit4(){
printf("At function exit4 %d\n", k++);
}
typedef void (* Func_t)(void);
int main (int argc, const char * argv[]) {
Func_t arr[4]={exit1, exit2, exit3, exit4};
int i=0;
for(i=0;i<4;++i)
atexit(arr[i]);
for(i=0;i<10;++i)
if(i==5){
printf("%d",i);
_Exit(0);
}
printf("End of program");
return 0;
}
При выполнении данного кода произойдет следующее. При i==5 программа завершит свое выполнение путем вызова функции _Exit, при этом ни один из обработчиков вызван не будет. Результат выполнения приведен ниже:
[Session started at 2008-11-07 11:10:00 +0300.]
The Debugger has exited with status 0.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий