Почему gcc не реализовал функции _s? - PullRequest
0 голосов
/ 06 июня 2018
Функции

_s, такие как scanf_s, printf_s, кажутся необязательными стандартами.MSVC реализовал эти функции, а gcc - нет.

Есть ли конкретная причина не реализовывать безопасные функции?Достаточно ли безопасен scanf gcc?

1 Ответ

0 голосов
/ 06 июня 2018

Функции _s являются дополнительными ( Приложение K стандарта C11 ).Они широко рассматриваются как «не очень полезные».

В ответах на мой вопрос Используете ли вы TR-24731 «безопасные» функции? , вы можете найти информацию о том, гдепроблемы со стандартной спецификацией, такие как принципиальные различия между стандартом и реализацией Microsoft.TR 24731-1 был техническим отчетом комитета по стандартам С.Отчет был включен почти дословно - с дополнительной, ранее опущенной функцией IIRC - в стандарт C11 как (необязательное, но «нормативное» Приложение K).Также есть TR 24731-2 для другого набора функций - без суффикса _s.Он столкнулся с сопротивлением по другому набору причин.

Кроме того, перед Комитетом по стандартизации C существует предложение , чтобы функции были удалены из следующего пересмотра стандарта:

Эта статья представляет собой прямое и убедительное изложение причин, по которым TR-24731 (*_s()) функции не получили широкого распространения.

Основные причины:

  • Проблема обнаруживается только один раз, затем устраняется, и тогда функция *_s() не нужна.
  • Это очень затрудняет тестирование функций *_s() или кода, который их использует.
  • Нелегко интегрировать новые функции в старый код (гдебыло бы больше пользы).
  • Функции по сути замедляют работу программного обеспечения с обширной, но избыточной проверкой.

Подробнее см. в документе.Документ заканчивается разделом:

Предлагаемое техническое исправление

Несмотря на то, что прошло более десяти лет с момента первоначального предложения и почти десять лет с момента ратификации ISO / IEC TR 24731-1:2007 г., и почти через пять лет после введения интерфейсов проверки границ в стандарт C не появилось жизнеспособных соответствующих реализаций.API продолжают вызывать споры, и исполнители продолжают отклонять запросы на их реализацию.

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

Поэтому мы предлагаем исключить приложение K из следующей редакции стандарта C или исключить его, а затем удалить,

...