Я нашел интересный момент: atexit()
функция работает по-разному для bionic
а также glibc
, Вот пример:
#include <cstdlib>
#include <cstdio>
extern "C" {
void one(){
printf("one\n");
}
void two() {
printf("two\n");
atexit(one);
}
}
int main() {
atexit(two);
}
Результаты для bionic
:
two
Результаты для glibc
:
two
one
Почему результаты отличаются?
Не определено, является ли звонок
atexit
функция, которая не происходит доexit
Функция вызывается успешно.
Стандарт ISO C, §7.22.4.2. Таким образом, оба поведения соответствуют; Вы не можете надежно зарегистрировать функцию, используя atexit
в то время как exit
уже работает atexit
обработчики.
Это поведение не определено. Вы можете определить несколько функций для вызова с помощью atexit()
несколько раз, но вы не должны использовать его, когда вы уже выходите из программы (т.е. после того, как вы ушли main()
).