пятница, 7 ноября 2008 г.

Использование функции _Exit

Рассмотрим второй вариант завершения программы.

Для завершения программы без вызова обработчиков, зарегистрированных с помощью функции 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.

Комментариев нет: