Что такое ограничение времени выполнения? - PullRequest
2 голосов
/ 13 января 2020

Я слышал о термине «ограничение времени выполнения» много раз. Я искал термин «ограничение времени выполнения» в фактическом стандарте ISO / IEC 9899: 2018 (C18), но все, что я нашел, это:

Источник: ISO / IEC 9899: 2018 (C18), раздел 3.18:

3.18

1 ограничение времени выполнения

требование к программе при вызове библиотечной функции .

Я не понимаю, что должно делать это предложение express. Какое требование? Я понимаю меньше, чем раньше.

Само «требование» здесь никак не описано. Подчеркнуто только то, что цитируемое требование должно существовать при вызове библиотечной функции, но не то, чем это требование является в действительности.

А что именно здесь подразумевается под "программой"?

Значит ли это, что ограничение на время выполнения является требованием для исполняемого файла как должна вызываться библиотечная функция? Но почему исполняемый файл должен вызывать библиотечную функцию? Я хотел сказать, что исполняемый файл - это только машинный код, который нужно выполнить.


  • Что такое ограничение времени выполнения в C?

1 Ответ

4 голосов
/ 13 января 2020

Это проверка, выполненная во время выполнения для недопустимых или отсутствующих значений - фактическая проверка ограничения зависит от вызываемой библиотечной функции c. Например,

K.3.5.1.1 Функция tmpfile_s

Сводка

1 #define _ _STDC_WANT_LIB_EXT1_ _ 1 #include <stdio.h> errno_t tmpfile_s(FILE * restrict * restrict streamptr);

Время выполнения -ограничения

2 streamptr не должны быть нулевым указателем.

IOW, если вы передадите NULL для streamptr, это нарушение ограничения во время выполнения, которое вызывает функцию-обработчик ограничения (вы можете написать свои собственные функции-обработчики ограничения). Это своего рода обработчик исключений, если это помогает визуализировать его.

Каждая библиотечная функция определяет свои собственные требования, поэтому у каждой есть своя проверка (и) ограничения времени выполнения.

Редактировать

Как отмечает Джонатан Леффлер в комментариях, ограничения времени выполнения применяются только к библиотечным функциям проверки границ, указанным в Приложении K, и эти библиотечные функции являются необязательными - не каждая реализация поддерживает их. Действительно, стандартная документация C n1967 указывает на то, что ни одна реализация не поддерживает их полностью, и функции, указанные в Приложении K C11 и C18, могут быть удалены из будущей версии стандарта C.

...