#c #language-lawyer #file-descriptor #setjmp
Вопрос:
Стандарт C гласит, что
Все доступные объекты имеют значения, и всех остальных компонентов абстрактной машины218) у государства, как функция longjmp называлось, за исключением того, что значения объекты с автоматическим хранением длительность которые являются локальными для функции, содержащей вызов соответствующую команду setjmp макроса, которые не имеют летучих квалифицированным типа и были изменены между вызовом команду setjmp и longjmp вызов неопределенного.»
218) Это включает, но не ограничивается, флагами состояния с плавающей запятой и состоянием открытых файлов.
(курсив добавлен)
Какова цель этого требования и как с ним справляются реализации?
Ответ №1:
В нем написано «с момента вызова функции longjmp«, а не setjmp, поэтому требуется просто не сохранять/восстанавливать слишком много состояния, что легко. (Мне пришлось перечитывать это довольно много раз, чтобы заметить это…)