setjmp/longjmp и состояние открытых файлов

#c #language-lawyer #file-descriptor #setjmp

Вопрос:

Стандарт C гласит, что

Все доступные объекты имеют значения, и всех остальных компонентов абстрактной машины218) у государства, как функция longjmp называлось, за исключением того, что значения объекты с автоматическим хранением длительность которые являются локальными для функции, содержащей вызов соответствующую команду setjmp макроса, которые не имеют летучих квалифицированным типа и были изменены между вызовом команду setjmp и longjmp вызов неопределенного.»

218) Это включает, но не ограничивается, флагами состояния с плавающей запятой и состоянием открытых файлов.

(курсив добавлен)

Какова цель этого требования и как с ним справляются реализации?

Ответ №1:

В нем написано «с момента вызова функции longjmp«, а не setjmp, поэтому требуется просто не сохранять/восстанавливать слишком много состояния, что легко. (Мне пришлось перечитывать это довольно много раз, чтобы заметить это…)