функция atexit () бионическая против glibc

Я нашел интересный момент: 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

Почему результаты отличаются?

4

Решение

Не определено, является ли звонок atexit функция, которая не происходит до exit Функция вызывается успешно.

Стандарт ISO C, §7.22.4.2. Таким образом, оба поведения соответствуют; Вы не можете надежно зарегистрировать функцию, используя atexit в то время как exit уже работает atexit обработчики.

3

Другие решения

Это поведение не определено. Вы можете определить несколько функций для вызова с помощью atexit() несколько раз, но вы не должны использовать его, когда вы уже выходите из программы (т.е. после того, как вы ушли main()).

1