Функция 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

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

2 ответа

Решение

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

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

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

Другие вопросы по тегам