int k=0;
void exit1(){
printf("At function exit1 %d\n",k++);
}
int main (int argc, const char * argv[]) {
int i=0;
for(i=0;i<400;++i)
atexit(exit1);
for(i=0;i<100;++i)
printf(".");
return 0;
}
На выходе получаем:
At function exit1 1
At function exit1 2
At function exit1 3
At function exit1 4
...
At function exit1 196
At function exit1 197
At function exit1 198
At function exit1 199
Если мы используем следующий код:
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[]) {
// insert code here...
Func_t arr[4]={exit1, exit2, exit3, exit4};
printf("Hello, World!\n");
int i=0;
int j=0;
for(j=0;j<400;++j)
for(i=0;i<4;++i)
atexit(arr[i]);
for(i=0;i<100;++i)
printf(".");
return 0;
}
В этом случае результат еще интереснее:
...
At function exit4 1596
At function exit3 1597
At function exit2 1598
At function exit1 1599
Это говорит о том, что количество функций-обработчиков - не ограничено. Все зависит от конкретной реализации.
Однако, согласно стандарту, надо помнить, что гарантировано вызывается только 32 обработчика.
Комментариев нет:
Отправить комментарий