1. Далеко не везде реализация выглядит именно так.
2. reentrant функция нужна для того, чтобы в момент её выполнения можно было бы вызвать эту же функцию ещё раз, например в случае многопоточного приложения или обработки сигнала. В случае reentrant функции гарантируется корректное поведение всех одновременно вызванных "копий" этой функции в процессе.
Простой пример не reentrant функции:
char * f_not_reentrant ()
{
static char buf [...];
/*
... заполняем буфер
*/
return buf;
}
Пусть при выполнении этой функции процесс перехватывает сигнал.
В этом случае, если в обработчике сигнала вызывается f_not_reentrant,
то вывод первоначально вызванной функции может быть неверным.