Функция, зарегистрированная с помощью atexit (), не вызывается - PullRequest
1 голос
/ 15 апреля 2011

Гарантируется ли, что функция, зарегистрированная с помощью atexit, ВСЕГДА будет вызываться при нормальном завершении программы? (Я столкнулся со сценарием во FreeBSD, когда функция, которую я регистрирую с помощью atexit, никогда не вызывается, даже когда программа нормально завершается).

Ответы [ 2 ]

3 голосов
/ 15 апреля 2011

Нет.Во-первых, функция не будет вызываться, если atexit возвращает ненулевое значение.Во-вторых, он не будет вызван, если функция, зарегистрированная до того, как она не вернется нормально.

1 голос
/ 15 апреля 2011

Что вы называете "нормальным завершением"?

Unix и C99 имеют функции _Exit (как POSIX и C99), так и _exit (только POSIX), которые позволяют завершать программу с любым состоянием, которое вы хотите, и без запуска обработчиков atexit. Другие известные мне случаи, когда они не выполняются, все явно терпят неудачу в "ненормальном завершении".

...